В моем логическом слое у меня есть необходимость проверять разрешения для самых разных действий. Некоторые действия являются общими, но некоторые являются узкоспециализированными. Каждое действие имеет соответствующую иерархию разрешений, которая оценивается до выполнения действия. Я ворочался в архитектурных идеях в своей голове, но не достиг прочного, который, я думаю, будет расширяемым, простым и элегантным.
Текущий код выглядит примерно так:
public class LogicObject
{
public void Add()
{
Check Add Permission
Perform
}
public void Update()
{
Check Update Permission
Perform
}
}
Проблема с этой архитектурой заключается в том, что, во-первых, она не так уж расширяема, а во-вторых, она не позволяет мне проверять разрешение без выполнения действия.
Другая идея, которая у меня возникла, состояла в следующем:
public class AddAction : IAction
{
public bool IsPermitted;
public void Perform();
}
public class LogicObject
{
public IAction AddAction {get { return new AddAction(); } }
}
Мне больше нравится эта архитектура, но я не совсем настроен на нее. Кажется, немного обманчиво. Я не могу представить, что этот тип архитектуры уникален. Каковы некоторые примеры лучшего способа сделать это?