Я работаю над проектом по управлению временем и ищу некоторые практические модели объектов / постоянства. У Фаулера есть несколько замечательных идей о распределении ресурсов в его книге «Шаблоны анализа», но многие излишне излишни в том, что мне нужно прямо сейчас, и в силу своей концепции весьма концептуальны (в отличие от реализуемых)
Фокусным концептуальным объектом, о котором я думаю, будет объект Allocation, который выглядит примерно так:
Allocation : Entity
-------------
Id : Id
ResourceId : Id
AtivityId : Id
EventDate ; DateTime
TimeSpent : TimeQuantity
Я также думаю, что это будет таблица базы данных, хотя я не уверен, будет ли она ассоциативной таблицей между ресурсами и операциями или автономной таблицей поиска (с доменом, обеспечивающим ссылочную целостность).
Двумя другими концептуальными объектами будут Ресурс и Деятельность. У обоих был бы набор Распределений, но после этого я немного застрял в продумывании интерфейсов. Различные типы персонала, членов и консультантов представляют интерес. Основным интересом Действия будет основываться на Проекте, а действия, не связанные с Проектом, основаны на различных Счетов заработной платы.
Это проект c #, использующий nhibernate.
Я понимаю, что это широкий вопрос, а не вопрос о программировании как таковом. Если кто-нибудь знает более подходящий форум для обсуждения этого вопроса, это было бы здорово. Если у вас также есть некоторый опыт работы с этим доменом и у вас есть идеи или ссылки, которыми вы готовы поделиться, это было бы здорово!
ОТВЕТ НА ORBMAN
Хорошие вопросы:
1) Чье время отслеживается (ресурсы), которое может быть
- FullTimeStaff
- AdminStaff
- Консультанты
2) период записи еженедельно
- Пользователь может ввести и изменить время, проведенное в любое время до публикации
- табели должны быть отправлены на рассмотрение менеджера отдела каждую неделю (воскресенье)
(Система не разрешит пользователю публиковать сообщения, пока не будут соблюдены еженедельные квоты)
- менеджер должен до следующего вторника утвердить / отклонить
3) время должно быть выделено для Деятельности, которые являются двумя основными типами
- Проектная деятельность
- внепроектные мероприятия (которые в конечном итоге публикуются на различных счетах П / П)
4) отчеты по ресурсам или по видам деятельности, доступные за специальные периоды времени.
Основная проблема, с которой я столкнулся, связана с полиморфизмом, необходимым как для Ресурса, так и для Деятельности, и тем, как его следует сохранить. В домене более полезно иметь IResource или IActivity, которые реализуют IAllocatable:
UniqueId: Id
BusinessId: строка
Описание: строка
Распределение: ISet
Ограничение в том, что Ресурс может только выделять время для Деятельности, является тем, что отличает их (для Деятельности требуется метод ClockIn, а для Ресурса - нет). Оба должны быть обертками для хорошо известных объектов, которые служат другим целям в системе (например, StaffMember, Project).
Мне нужен уникальный идентификатор для сохранения и, возможно, суррогатный ключ для самого распределения. Я также не уверен, должна ли существовать ссылочная целостность между распределениями и обернутыми ресурсами / действиями, и как это отобразить, если это так. Я использовал Fluent NHibernate, но думаю, что может оказаться проще просто использовать NHibernate.
Еще раз спасибо за хорошие вопросы.