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