我该从UI层返回什么给业务层?

5
我正在编写一个ASP.NET应用程序,它有UI层、业务逻辑层和数据访问层。我从数据层返回业务对象到业务逻辑层,并将其传递到UI层。然而,当我想使用来自UI层的数据执行保存/插入操作时,我不确定该怎么办。
我应该在UI层创建业务对象并将其传递给业务层,还是应该在业务层中创建它呢?
非常感谢。

感谢大家的评论 - 非常感激。 - Nick
4个回答

2

我同意crunchdog的观点-- 对于大多数非微不足道的Web应用程序,您应该拥有一个扁平化的业务对象表单,专门为UI /视图层设计。有时,这被称为View Model类,通常仅包含几个字符串属性,UI层可以直接获取和放置而无需担心验证问题。(请参见asp.net mvc)

首先,这使得UI层更加清洁和简单,使其将精力集中于显示数据而不是遍历对象结构,检查和解释空值等方面。

这还为业务层提供了机会,对这些字符串值进行验证,如果它们无效,则返回输入的值。例如,当服务器处理日期字段中的无效日期时,这可以节省编码烦恼。业务层识别无效值后,可以将它们与适当的错误消息一起返回,正如收到的那样。如果您只处理业务/领域对象,则输入的某些值可能并不总是适合用于保存它们的对象。

还可以帮助指定一个类,用于在业务/领域对象和UI对象/视图模型之间映射值。这有助于保持业务层关注点的清晰分离。


0
我认为最好的做法是拥有模拟“真实”的业务对象的UI层对象。这些模拟对象不需要拥有所有信息(如关联等),而业务层则需要负责从业务对象转换。对于Web应用程序来说,这尤其方便,因为你不需要在客户端和服务器之间来回传输过多的数据。

Crunchdog正在谈论数据传输对象或DTO,简称DTO:http://en.wikipedia.org/wiki/Data_transfer_object。 - Steven

0

如果您不想要过多的业务对象编码,那么在检索数据时您做得很正确(即从DAL返回相同的业务对象到BL到UI)。

在保存数据时,您可以将这些对象作为参数传递到您的BL和/或DAL层。您可以传回当前对象(如果将其绑定到UI控件)或创建该对象的新实例并设置所做的更改。

然后在您的DAL层中只需读取对象并将更改保存回数据库。


0

我发现最简单的解决方案是从UI传递一个View Model对象到Business层,原因有几个。最明显的是,验证应该发生在Business层,因此在UI中创建Business对象违反了MVC原则。

更重要的是,如果用户输入无效数据,Business对象可能(正确地)无法接受该数据。然而,您不想丢弃用户输入的数据,因此一个免于验证的View Model对象为您提供了一种存储和传递用户输入的数据的方式,无论它是否有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接