私はPythonを使用した個人プロジェクトに取り組んでいます。私は自分の能力を最大限に活用してバージョン管理を使用しており、それをチェックアウトしてアプリを実行したい場合は https://github.com/CodeAmend/old-bull-tools/tree/develop =
Floobitsを使用する場合は、ここのエディターで実際のコードを確認してください。 https://floobits.com/CodeAmend/old-bull-tools/file/app.py:1
私はこのプロジェクトでバージョン管理を学んでおり、自分の能力を最大限に活用してTDDを使用しようとしています。現在、Test_Scheduleクラスを開いているため、テストメソッドの作成は困難でした。
私がやろうとしていることの短いスライス:スケジューリングシステムを処理するAPIを構築しています。これにより、Webやモバイルデバイスと通信します。ユーザーはサインインしてスケジュールを確認し、日付を変更して他のスケジュールされた時間を表示し、表示される情報の量を選択することもできます(つまり、サーバーまたはキッチンスタッフのみ、日次ビュー、月ビュー、カレンダービューのみを表示します)。
これが質問です:スケジュールオブジェクトをどのように構築しますか?これをどのように視覚化する必要がありますか?前進するには、どのような種類の質問をする必要がありますか?スケジュールを入力するには、ユーザーとシフトの両方からの情報を使用する必要があるようです。
今私は行き詰まっています。これは、ユーザーとシフトの2つのオブジェクトがあるためです。スケジュールオブジェクトを作成する必要があると考えています。
ユーザーには、_id(user_id)、名前、メールなどが含まれます。
shiftには_id、user_id、start_time、stop_timeが含まれます
このようなものをフロントエンドに表示するには、スケジュールを設定する必要があります。このようなちょっと:
# mon tues weds thurs fri sat
# user1 4:00 ____ 6:00 4:00 5:00 6:00
# user2 4:00 5:00 6:00 ____ 5:00 6:00
これはほんの一例ですが、これを見ると、Scheduleがこのようなもの(Shift、None、Shift、Shift、None、Shift)を返す必要があるかもしれません。
これは私のシフトオブジェクトのいくつかのテストケースです
def test_create_shift(self):
def test_shift_throws_error_if_time_is_not_int(self):
def test_save_shift_to_database(self):
def test_get_shifts_by_id(self):
def test_get_shifts_within_date_range_by_id(self):
def test_get_shifts_on_specific_date_by_id(self):
def test_get_shifts_before_end_time_by_id(self):
def test_get_shifts_after_start_time_by_id(self):
def test_get_shifts_exactly_on_start_date_by_id(self):
def test_get_shifts_exactly_on_end_date_by_id(self):
def test_get_current_weeks_shifts_by_id(self):
これまでの私の思考プロセスは次のとおりです。
schedule = Schedule(user_id) <---- no range added
test_no_range_added_returns_this_weeks_shifts_for_user()
assertEquals(len(schedule.shifts), 7)
test_user_with_no_shifts_returns_none_for_each_day_in_range()
for i in range(schedule.shifts):
assertEqual(schedule.shifts[i], None)
これは思考の最新のものです。スケジュールは1行だけなので、基本的には1人のユーザーです。スケジュールにはシフトとユーザーがあります。複数のスケジュールが読み込まれ、すべての従業員にデータが入力されます。おそらく、Scheduleは最適な名前ではありませんが、まだわかりません。
これが私の考えです:
class User(object):
"""A user of the scheduling system."""
def __init__(self, name, email):
self.name = name
self.email = email
class Shift(object):
"""
A user's shift.
Does not represent an actual date, only the start and end hours.
"""
def __init__(self, start, end):
self.start = start
self.end = end
class Schedule(object):
"""
A schedule is made out of multiple date objects, linking
these dates to multiple users, and their shifts.
"""
def __init__(self):
self.shifts = {}
def set_user_shift(self, date, user, shift):
try:
self.shifts[date]
except KeyError:
self.shifts[date] = []
self.shifts[date].append({'user': user, 'shift': shift})
基本的に、ユーザーは単にユーザーであり、シフトは単に開始時間と終了時間の定義です。スケジュールはより興味深い部分です。スケジュールは複数の可能な日付から作成され、各日付には複数のユーザーがいて、各ユーザーはその日付のそれぞれのシフトにリンクしています。
他の人が言ったように、一般的には、何も結合しすぎないように感じて、ソフトウェアで作業したいと思います。プレゼンテーション(印刷)は実際にはデータとはほとんど関係がなく、データベースについて考え始めるまで、IDについて考える必要はありません。
ドメインモデルを理解しようとするときは、その瞬間にソフトウェアの他のコンポーネントを無視することをお勧めします。あなたが何をしようとしているのかについてより強い考えを持っているとき、あなたは残りについて考え始めることができます。オブジェクトと関数があまりにも結合されてはいけないのと同じように、それらの私たちの考えもそうであってはなりません。