правильный шаблон дизайна для программы отпуска сотрудника? - PullRequest
4 голосов
/ 03 сентября 2010

У меня есть то, что мне кажется простым веб-приложением с запросом времени сотрудника (C #, Silverlight или ASP.NET).Сотрудник может запросить отпуск, больничное время, отпуск по беременности и родам, время работы и т.д.

Это действительно превращается в беспорядок со всеми аномалиями и таким, что я должен предвидеть.Например, люди в разных ролях получают разное время отпуска.У некоторых людей накапливается время отпуска, а у других - все в начале финансового года (1 сентября).У сотрудников есть банк, который они могут хранить в больничном и отпускном времени, но размер этих банков ограничен и варьируется в зависимости от роли сотрудника.В любой момент времени мне нужно уметь видеть, сколько осталось у сотрудника и сколько ему доступно.Я считаю, что самая большая аномалия в том, что сотрудник может поменяться ролями (то есть переключиться на менеджера в любое конкретное время и, следовательно, начать получать больше отпуска с этого момента).

Это довольно сложная проблема.Мой вопрос был такой:

Как мне это спроектировать?Какой хороший шаблон дизайна использовать для этого, когда я могу быть очень гибким в будущем?

Спасибо!

Ответы [ 6 ]

1 голос
/ 03 сентября 2010

Политически я бы избежал всей проблемы.Вы должны работать с этими людьми, и ваше приложение может испортить вам отпуск.

В любом случае, я бы сказал, что отслеживание начисления отпуска действительно выходит за ваши рамки, если только это не предполагается.приложение для отслеживания заработной платы и пособий.Скорее, я бы позволил соответствующей стороне указать, сколько у него отпуск в данное время, и направил бы запросы менеджерам, и оставил бы это.

0 голосов
/ 03 сентября 2010

Я бы посмотрел больше на что-то вроде Domain Driven Design, чтобы описать домен, с которым вы работаете. Начните с просмотра существительных, которые вы используете для описания домена:

  • Сотрудник
  • Менеджер
  • Роль
  • Время отпуска
  • Время болезни
  • Отпуск по беременности и родам
  • Запрос

Эти существительные начинают определять модели, которые вы можете определить в бизнес-сфере. Затем я бы взглянул на глаголы, связанные с каждым существительным:

  • An Сотрудник Может Запрос Время перерыва
  • A Менеджер Может Утвердить a Запрос

Эти глаголы теперь определяют ваши действия. У вас есть домен, но вам также нужен внешний интерфейс, я бы обернул домен внутри уровня сервиса, даже если сервис нигде не размещен, и использовал бы шаблон Repository для изоляции вашего уровня доступа к данным.

В качестве примера рассмотрим разделение ответственности при выполнении командных запросов (CQRS) для определения взаимодействия между вашим пользовательским интерфейсом и вашим доменом.

0 голосов
/ 03 сентября 2010

Использование подхода «какой шаблон проектирования будет работать» никогда не является хорошим способом решения проблемы.Описанная вами потребность действительно заключается в том, «как мне построить систему управления отпуском на предприятии».Шаблоны проектирования не решают этот тип проблемы, шаблоны проектирования имеют меньший масштаб.Корпоративные системы обычно используют несколько различных шаблонов проектирования во всей системе.Шаблоны проектирования - это всего лишь синяя печать для эффективного способа структурирования вашего кода.Взгляните на wikipedia , чтобы получить более глубокое представление о типах проблем, которые решают шаблоны проектирования.

Краткий ответ: нет, для этого нет шаблона проектирования.

Я думаю, вам нужно сесть и начать документировать, как система будет работать, все функции (неважно, насколько они велики или малы), все правила того, как время отпуска может быть начислено и зарезервировано, прежде чем вы начнете думать о коде.Вам предстоит пройти долгий путь, прежде чем вы начнете кодировать.

0 голосов
/ 03 сентября 2010

Если возможно, вообще не отслеживайте часы:
Просто ведите организационную диаграмму и список типов перерывов и передавайте запросы руководителю запрашивающего

Если вы должны отслеживать доступные часы:
Похоже на пару (возможно, большие) справочные таблицы, в дополнение к пунктам выше.

Схема, подобная приведенной ниже, кажется подходящей

(1) Employee  --> (1) Position --> (1/*) TimeOffAllowances 
              --> (1/*) AvailableTimeOff

В этом варианте у вас будет либо строка в TimeOffAllowances / AvailableTimeOff с каждым столбцом для типа пособия, либо по одной строке для каждого типа. Таким образом, отношения либо один ко многим, либо один к одному. ((1/*) в приведенном выше).

Тогда, конечно, вам понадобится интерфейс для ввода всех этих данных ...

0 голосов
/ 03 сентября 2010

Начальным шаблоном разработки будет MVC, поэтому, вероятно, используйте ASP.NET MVC в качестве его встроенного;)

Это позволит вам отделить код представления от ваших более сложных бизнес-правил.иметь для разных сотрудников.

Шаблон расчета стратегии будет использоваться для расчета оставшегося времени, поэтому вы можете инкапсулировать код для определения количества дней, оставшихся на основе, если они основаны с 1 сентября, иликакая-то другая дата.

0 голосов
/ 03 сентября 2010

Учитывая сложность, похоже, что вам нужно спроектировать процесс начисления времени вокруг системы правил. Вам необходимо определить правила, которые определяют, как начисляются отпуска, и применять их к каждому типу сотрудников. Каждое правило, которое влияет на то, как заработать отпуск, должно быть реализовано и применено соответствующим образом.

Попробуйте разработать правила объектно-ориентированным способом: некоторые правила могут применяться в целом, другие более конкретно.

Вам понадобится возможность проверять время отпуска. Когда пользователям дается разрешение на использование отпуска, используйте систему бухгалтерских книг, чтобы «отозвать» заработанное время. Предоставляйте время, используя систему правил на регулярной (ежедневной) основе, также используя систему бухгалтерских книг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...