我想知道我的解决方案是否存在设计缺陷。这是我所拥有的:
Entities
=> 纯 poco。参考:没有。Data
=> 数据访问。参考:Entities
。Service
=> 业务逻辑。参考:Entities
和Data
- 经理班。
- 视图模型。
WebApp
=> 用户界面。参考:Entities
和Service
WebApp
ASP.NET MVC项目作为UI,Entities
纯POCO项目无参考。Data
访问数据库和Service
业务逻辑(我的 Manager 类所在的位置)。
基本上,我Manager
为每个实体定义了一个类。例如,我有一个Message
与实体列表相关的Recipient
实体。我有一个MessageManager
和RecipientManager
类,负责使用数据层和逻辑结果的 CRUD 操作(例如public List<Message> GetAllMessagesWithPermissionForUser(User user, Permission permission)
)
对于我的 MVC 项目,我在服务层定义了一些 ViewModel 类来为我的视图生成特定的视频模型。由于视图模型使用管理器类,我在我的服务类中定义了它们。例如,我有一个MessageOperationVM
具有PermittedBoxesToSend
属性的视图模型。此属性使用我的BoxManager
类来获取指定消息允许的所有框:
// Initialized by Catsle Windsor.
public BoxManager BoxManager {get; set;}
public List<Box> PermittedBoxesToSend
{
if(this._premittedBoxesToSend != null)
{
this._permittedBoxesToSend = BoxManager.GetPermittedBoxesToSend(this.Message);
}
}
我不确定在 Viewmodels 中使用管理器类是否是一个好的设计。尽管我已将它们定义为构造函数/属性设置器以填充 DI。我应该在我的控制器中填充我的视图模型的属性而不是定义属性并摆脱我的视图模型中的管理器类吗?
public ActionResult ShowNewMessageDialog() { var messageVM = new MessageOperationVM() { new Message() }; messageVM = this.BoxManager.GetPermittedBoxesToSend(); }
为每个实体使用一个管理器类似乎使维护变得困难。(尽管它们都派生自一个
BaseManager
共享它们共同操作的类)- 上述设计中是否有任何值得一提的重新考虑?
谢谢你。
更新:
基于 eulerfx 的回答:
我对您的回答的问题是:要构造 ViewModel,我必须调用一些服务层的方法。所以我不能仅仅基于我的 poco 实体来构建我的 ViewModel。您是否建议我也应该在控制器中构建这些部分?:
public ActionResult ShowNewMessageDialog()
{
var message = this.messageRepository.GetMessage();
var messageVM = new MessageViewModel(message);
messageVM.CustomProperty = this.messageManager.CallSomeMethod(message);
return View(messageVM);
}