哪个是更好的类设计:页面调用类和页面调用BLL或类调用BLL?

时间:2009-06-18 17:23:58

标签: class

如果我有一个对象,比如说,一个用户类,比如说First&姓氏属性填充它的更好方法是什么:

  1. PAGE实例化类,PAGE调用业务层以使类成为popualte。 (在这种情况下,类本质上是数据的容器)。
    1. 类本身不仅具有属性,而且还有一个方法来调用业务层,填充自身并返回填充到页面的内容。

7 个答案:

答案 0 :(得分:5)

我会选择前者。我认为它更干净,即使业务层发生变化,您的User类也可以独立存在。

另请注意,前者似乎更有利于使用3层MVC架构。

答案 1 :(得分:3)

这实际上取决于你将要使用该课程的内容。它是否只是一个容器,你填充并用于显示?您是要修改数据并使用它来更新数据库吗?

基本上你所看到的是DAO / DTO功能集。在#1的情况下,您谈论的是数据传输对象(DTO),它只是数据的容器。在#2的情况下,您正在谈论数据访问对象(DAO),它是一个了解如何持久保存数据以及从何处获取数据的对象。

您缺少的是案例#3,它是一个了解与您的数据相关的业务逻辑的业务对象。即我的用户拥有什么权限,我的用户在公司内的位置(假设是业务用户)。

不幸的是,没有一个正确答案,这完全取决于你想要建立什么。

答案 2 :(得分:2)

我更喜欢前者。使用后者,最终会在最奇怪的地方强制依赖。

答案 3 :(得分:1)

我建议您阅读工厂方法抽象工厂模式,以便将类的创建委托给除了类或页面之外的其他内容。原因如下:

页面主要关注页面内容 - 它只关心拥有名字和姓氏的东西,而不是类的类型。因此,它不应该创建类,只是要求实现。该页面只关心一个接口,可能是firstname和lastname属性,也许是save()方法。

如果班级知道业务层的细节,那么您就拥有了不需要的依赖关系。要更改业务层,您必须更改类内部或更改页面,以便创建不同的类。如果您为许多类执行此操作,则更改业务层将需要在类和/或页面层中进行许多更改。

答案 4 :(得分:0)

我会为所有业务对象实现一个抽象超类实现reloadData()方法。它可以与Web环境分开测试,Web环境不依赖于数据层。

答案 5 :(得分:0)

我看待它的方式是你必须分离关注点。当依赖性较低时,测试也会更容易。我会使用第一种方法。

答案 6 :(得分:0)

如果对象有一个调用Business.Save()方法的.Save()方法怎么办?

也许这会混淆得太多了。