Добавление методов в классы POCO - PullRequest
6 голосов
/ 16 декабря 2011

У меня есть следующие настройки: MVC> Services> Repositories. Теперь я хочу, чтобы пользователи могли добавлять примечание к документу. Только пользователи, связанные с документом (как владельцы или рецензенты), могут добавлять заметки, поэтому в моем NoteService я делаю следующее, чтобы убедиться, что у пользователя есть разрешение на выбранный документ:

public Note GetNewNote(int documentID)
    {
        if (!userHasAccess(Thread.CurrentPrincipal.Identity.Name))
            throw new BusinessLogicException();

        // Other stuff here...
    }

Мой вопрос: где я должен определить метод userHasAccess? Это не имеет смысла в NoteService, поскольку он проверяет документ. Я мог бы определить это в DocumentService, но тогда NoteService потребуется доступ к этому, который, кажется, вводит больше связи.

Для меня имеет смысл определить его в самом документе POCO, а затем вызвать document.userHasAccess (...). Будет ли это хорошей практикой или домен POCO должен быть ограничен простыми свойствами? Я обеспокоен тем, что это действительно часть проверки и что, поместив метод в POCO, я разделяю проверку между Service и POCO.

Я стараюсь обеспечить простоту обслуживания и тестирования моего приложения. Любые предложения о том, как мне решить эту проблему, будут очень полезны!

Ответы [ 3 ]

6 голосов
/ 16 декабря 2011

Где я должен определить метод userHasAccess?

Имеет смысл быть совместимым с остальным дизайном, хотя я не знаю полного дизайна, я могу, по крайней мере, сказатьчто метод UserHasAccess () в самом POCO имеет смысл.

Следует ли ограничивать POCO домена простыми свойствами?

Нет, POCO домена должен содержать логику(особенно логика проверки), связанные с объектом.В противном случае он оказывается объектом без поведения - то, чего вам определенно следует избегать.

Однако не путайте между объектом домена (бизнес-объекта) и объектом представления, который обычно содержит мало логики.

Вы обеспокоены тем, что разделяете проверкумежду Сервисом и POCO.

Я бы поставил валидацию в POCO и междоменную логику в сервисах.

0 голосов
/ 16 декабря 2011
  1. Если вы следуете шаблону доменной модели, вы можете добавить атрибуты с поведением. Проверьте это Мартин Фаулер
  2. Если вы следуете шаблону табличного модуля, добавьте поведение в классе BLL и атрибуты в POCO проверьте это также Мартин Фаулер
0 голосов
/ 16 декабря 2011

Любая доменная сущность также может содержать методы проверки.

...