我应该在UI层创建业务对象并将其传递给业务层,还是应该在业务层中创建它呢?
非常感谢。
我同意crunchdog的观点-- 对于大多数非微不足道的Web应用程序,您应该拥有一个扁平化的业务对象表单,专门为UI /视图层设计。有时,这被称为View Model类,通常仅包含几个字符串属性,UI层可以直接获取和放置而无需担心验证问题。(请参见asp.net mvc)
首先,这使得UI层更加清洁和简单,使其将精力集中于显示数据而不是遍历对象结构,检查和解释空值等方面。
这还为业务层提供了机会,对这些字符串值进行验证,如果它们无效,则返回输入的值。例如,当服务器处理日期字段中的无效日期时,这可以节省编码烦恼。业务层识别无效值后,可以将它们与适当的错误消息一起返回,正如收到的那样。如果您只处理业务/领域对象,则输入的某些值可能并不总是适合用于保存它们的对象。
还可以帮助指定一个类,用于在业务/领域对象和UI对象/视图模型之间映射值。这有助于保持业务层关注点的清晰分离。
如果您不想要过多的业务对象编码,那么在检索数据时您做得很正确(即从DAL返回相同的业务对象到BL到UI)。
在保存数据时,您可以将这些对象作为参数传递到您的BL和/或DAL层。您可以传回当前对象(如果将其绑定到UI控件)或创建该对象的新实例并设置所做的更改。
然后在您的DAL层中只需读取对象并将更改保存回数据库。
我发现最简单的解决方案是从UI传递一个View Model对象到Business层,原因有几个。最明显的是,验证应该发生在Business层,因此在UI中创建Business对象违反了MVC原则。
更重要的是,如果用户输入无效数据,Business对象可能(正确地)无法接受该数据。然而,您不想丢弃用户输入的数据,因此一个免于验证的View Model对象为您提供了一种存储和传递用户输入的数据的方式,无论它是否有效。