C# 应用程序外观模式的最佳实践

C# 应用程序外观模式的最佳实践,c#,.net,design-patterns,facade,C#,.net,Design Patterns,Facade,我有一个多层SOA应用程序和一个包含100多个表的数据库。我正在为我的数据层使用实体框架,它负责所有CRUD操作 我有一个facade类,它托管在一个服务上,可由各地的客户端应用程序调用 这个facade类包含如下方法 private void DoSomething() { //insert to table1 //insert to table 2 //delete from table 3 //more CRUD operations } facade类基本上充满了与Do

我有一个多层SOA应用程序和一个包含100多个表的数据库。我正在为我的数据层使用实体框架,它负责所有CRUD操作

我有一个facade类,它托管在一个服务上,可由各地的客户端应用程序调用

这个facade类包含如下方法

private void DoSomething()
{
  //insert to table1
  //insert to table 2
  //delete from table 3
  //more CRUD operations
}
facade类基本上充满了与DoSomething()类似的其他方法的负载

因此,客户机将基本上创建facade类的一个实例,并获得对所有这些方法的访问权

我现在的问题是,这是门面模式的最佳实践吗?我觉得facade类太“重”,如果我的应用程序扩展得更大,我不确定它是否会影响性能


如果在facade类中有大量的方法,那么创建facade类的实例会是一项非常昂贵的操作吗?

好吧,facade对于SOA体系结构来说是非常合适的,只要它将子系统封装为一个对象,并为客户机的所有业务对象和服务提供一个聚合接口。它还减少了体系结构中的耦合。我认为您的方法并不繁重,也不会影响系统的可伸缩性

创建facade类的实例是一项非常昂贵的任务吗 操作,如果我有很多方法在里面

假设这些方法在构造过程中没有被调用,它们应该不会对对象的“重量”产生影响。我的理解是,一个不做任何事情的方法不会因为实际目的而花费内存或周期

(作为旁注,有一些技术限制不能为您的问题增加价值。请参阅)

让你的门面为你工作!一个好的做法是假设您正在将它移交给其他人,并询问“这是否清楚地描述了我的API的功能?”。60听起来好像达到了我个人偏好的上限,但这仍然只是15个对象的积垢


将facade视为一个统一的接口,它可以让您自由地创建更简洁、更复杂的服务(这反过来应该封装更简洁的存储库,而存储库反过来应该封装更简洁的表中数据记录、桶中的blob等)。

因此,facade类可以说,60多种方法来封装子系统的所有内部工作?虽然这种方法降低了API展示的内聚性,但如果它实现了模式的四个主要目标,我认为这是可以的:1)使软件库更易于使用、理解和测试,因为facade具有用于常见任务的方便方法;2) 出于同样的原因,使图书馆更具可读性;3) 减少外部代码对库内部工作的依赖,因为大多数代码都使用外观,因此在开发系统时允许更大的灵活性;4) 用一个设计良好的API(根据任务需要)包装一个设计拙劣的API集合。如果您的facade简化了子系统的使用,那么公开如此多的方法是没有问题的,这就是想法。显然,如果您的facade不需要为每个实例保留一些单独的状态(并且可能不需要),那么您将把它实现为一个单例(这是最常见的场景),这是很便宜的。我不会担心类有多重,特别是如果它是无状态的并且可以作为单例存在的话。API的耦合越松散,水平扩展就越容易。我知道这有点陈旧,但你是对的,方法的数量真的不应该有任何影响。方法是JIT编译的,因此您可以有100个方法,并且只使用2个。因此,在运行时只编译2个。