Добавление методов к классам POCO

У меня следующая настройка: 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 будет нуждаться в доступе к нему, что, кажется, увеличит количество связей.

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

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

6
задан James 16 December 2011 в 13:55
поделиться