假设我们创建3层模块,这使我们能够显示/创建/编辑文章。 文章如下:
•组织成类
•以前的文章可以发表,管理员可以通过设置审批 文章数据表的字段设置为true予以批准
•通过设置MembersOnly场( 第表 ),管理员还可以指定是否特定物品可以由任何人或只由注册用户可以查看
• 文章表还具有ExpiredDate领域,它告诉时候会在文章到期,因此不再发布
a)在DAL层,我们提供的方法GetAllArticles,GetArticlesByCategory,GetPublishedArticles和GetPublishedArticlesByCategory从数据库中检索文章
在BLL层,我们使用GetArticles()重载调用上述所有的DAL方法。
是什么一些使用单重载的方法中的BLL层代替BLL方法具有DAL方法一对一对应的好处? 唯一的好处我能想到的是,这种方式同样ObjectDataSource控件可以调用两个或两个以上GetArticles()的重载,根据参数的值,例如:
public static List<Article> GetArticles(bool publishedOnly) { if (!publishedOnly) return GetArticles(); ... }
- 如果你不还设计UI层,因而无法确定哪些方法UI程序员会喜欢最,这将是一个DLL层的最佳实践提供GetArticles + GetAllArticles,GetArticlesByCategory,GetPublishedArticles和GetPublishedArticlesByCategory四个重载 ?
2)当设计DAL方法来检索数据库的数据,你事先怎么能知道/预测(不首先设计UI),到底哪个方法(用于访问DB),我们应该在DAL层创建?
也就是说,在前面的例子中我已经检索基于参数个数文章的几种方法(基于分类它们属于,我们是否只是想发表的文章等)。 假设我卖这个模块第三方UI开发人员,那么有没有办法知道他们更喜欢哪个数据访问方法最:
一)我所以要创造尽可能多的数据访问方法,因为我可以让那些已经过期得到那些已经过期的所有文章的所有文章,一个想到的(一个,但从来没有公布,一个用于获取不属于所有文章出版,一个是让所有的物品,可以由注册用户可以只查看......)?
b)尽管所有的三个层我自己写的 - 我应该还是创建多达我能想到的数据访问方法?
感谢名单
编辑:
实现这一目标的一种常用方法是使用接口来定义的API的行为。
一)我不知道我理解这一点。 哪个类应该实现这个接口? 也许DLL类? 换句话说,如果我的DLL类的名称是文章,那么第三方将获得命名ChildArticle从第三类,其中ChildArticle也将实现这个接口? 还是你的意思别的吗?
B)反正,据我了解,提供接口(其中声明定义了额外的DLL方法来检索数据库的文章)也将需要已经适当的方法来定义DAL类,这将通过在接口中声明的方法叫什么名字?
为了你的观点,我认为这是更喜欢在BLL较少的粗粒度的方法来覆盖所有的整个业务操作所需的功能,是个好主意
我不熟悉这个词,但你的概率暗示我们应该更喜欢GetAllArticles,GetArticlesByCategory,GetPublishedArticles和GetPublishedArticlesByCategory超载GetArticles()?
A)的API的设计是严格把这是什么意思来实现,由谁来将使用它。 在实践中,这意味着你应该知道你的API的目标受众,并给予他们只需要怎样把工作做好。
除非我亲自面试会买我的产品的人,我一般猜测哪些方法,他们会发现有用的,但该空间内,还有任意数量的可能的方法我可以定义。 因此,我怎么会知道他们是否也应该有,比如说,GetArticles()重载其检索已经过期物品使用?
在另一边是完全正常的有在DAL许多小型的数据中心的方法与特定的数据工作。
如果不是DLL,应该DAL有尽可能多的数据访问方法,我可以拿出(针对特定的目标当然是受众)?
第二个编辑:
有几个扩展点可以被内置到API获得一定程度的灵活性。 实现这一目标的一种常用方法是使用接口来定义的API的行为。 这将使消费者更换或提供自定义实现扩展的内置功能件。
假设我创建了一个BLL层,然后提供一些额外的接口,消费者可以实现延长BLL的内置的功能。 但对于消费者能够实现这些接口,他们将需要访问BLL的源代码,对不对? 但是,如果我不想要什么消费者查看BLL的源代码?
接口应层之间。 更具体地讲,类应该只通过接口从其他层的类交互
一)因此,即使DAL的内置功能应该通过接口暴露? 但为什么? 也就是说,如果我们可以使用抽象类而不是接口,那么这个类可能已经实现共同从这个抽象类继承所有供应商类的一些实用功能? 在另一方面,如果DAL使用接口代替,则通用于所有供应商的实用功能将不得不为每个供应商一旦实施,这可能意味着大量的冗余编码?
B)不管怎么说,我不太看的好处(除非我们提供与消费者可能会延长具有不同于层通过接口进行交互类的基本功能)接口?
为了增加透明度,而不是重载方法与不同的参数来工作,我相信这是最好有接受单个参数的一个方法。 该参数将是包含所有数据,以便与工作的方法的对象。 一些数据可能是必须的,有些可能是可选的,并且会影响手术的效果。
如果我知道用户界面将广泛使用对象数据源控件,我应该还是喜欢BLL定义一个方法(具有对方法的所有数据对象作为参数,这种方法与工作),而不是方法重载?
队友的欢呼声