15

Web/企业应用程序中使用的一些最常见的设计模式是什么?为什么使用它们?

注意:回答为什么部分应该基于列出他们倾向于解决的问题?

4

9 回答 9

5

我经常使用控制反转

特别是在持久化/加载对象时。当我们不确定数据是来自数据库、Web 服务还是其他机制时,它会有所帮助。

通过使用一个接口并允许多个源公开一个简单的 API 用于保存/检索,并允许对象本身知道哪些 API 调用,使我们最终得到一个非常易于管理的架构。

这方面的一个例子是here

于 2010-01-09T21:57:22.650 回答
2

例模式非常常见。它的主要用途是确保您永远不会实例化超过一个给定类型的对象,这使得它成为全局变量的一个很好的替代品,全局变量具有明显的邪恶声誉。支持和反对 Singleton 有不同程度的争论,有些人声称它与全局变量一样糟糕。

我倾向于自己使用它来处理我通常称为“经理”的广泛对象。例如,在需要多个数据库的大型应用程序中,您不希望一直打开很多连接。我将有一个DatabaseManager单例类,它将在内部管理与每个数据库的连接。消费对象可以调用一个DatabaseManager::getConnection()方法,管理者的工作是确保存在单个连接(如果必须打开它),并将其返回给消费对象。

这解决了在整个地方传递全局数据库连接的问题,并具有高效对象使用的附带好处,因为只有一个 DatabaseManager 存在。静态调用意味着它可供任何需要它的消费者使用。

于 2010-01-09T21:52:25.207 回答
2

MVC

Model-View-Controller 允许业务逻辑和表示层之间的低内聚,这是它的主要价值。

通常每个控制器都是一个Servlet处理单个页面的 GET/POST 请求,通过呈现正确的视图或将管辖权转移给另一个控制器来响应它们。

Viwer 将控制器传递的数据转换为 Html、Xml、JavaScript、JSON 或任何您喜欢的技术。Viewer 通常是一个Servlet或一个 Servlet 抽象,如 JSP、ASP 等。

模型是应用程序对其进行操作的数据的特定领域表示。它还可以与为数据提供意义的域逻辑相结合(例如计算生日、总计或购物车购物项目的运费)。模型应该封装数据,无论底层存储设施如何,都可以轻松访问。

由于它与 MVC 的低内聚性,您可以独立地更改、开发和测试每个组件。

活动记录

当底层存储机制是数据库时,通常会使用这个。基本上,ActiveRecord 的意思是您的所有对象属性都对应于底层数据库中的列,并且每个对象都包含诸如插入、更新、删除(和加载)之类的功能。

因此,每个类都被转换为一个表或一个视图,每个对象成为所述表中的一行。

这样做的原因很简单,因为您的类实现了访问和编辑数据库的方法,您不必编写额外的样板代码。再加上数据库的流行,足以让这种模式保持有趣。

游泳池

另一个经常使用的是PoolsPoolManager是一个管理(无论是数据库、工厂方法还是连接)的单例。ResourcePoolManager 保存一组初始化的副本。每当另一个进程或对象通过他请求资源时,PoolManager.acquire()他会从池中获取其中一个对象。
然后,他操作他的资源副本,并在完成后通过Resource.release(). 然而,该对象并没有被销毁,它只是返回到池中。

Pools用于提高性能。
例如,如果有一个工厂方法的检索成本很高(即响应速度很慢),它通常被包装在 a 中PoolManager,并且N个实例是在初始化时创建的PoolManager。这样客户就不会觉得底层工厂很慢,因为PoolManager他们的性能受到了打击。

于 2010-01-09T21:53:24.933 回答
1

常用的企业设计模式之一是前端控制器。它需要集中式接入点或入口点。由 J2EE 框架(如 struts、jersey 等)使用,因此开发人员可能不会注意到它。

于 2014-07-17T09:46:38.967 回答
1

I think Facade & Adapter pattern are widely used by developpers but they don't know they actually do.

于 2010-01-09T23:01:58.133 回答
0

工厂模式,主要是 factory_object 和 factory_method 非常常见,
例如用于 xml 文档的 DocumentFactory。
工厂模式的目的是简化对象的创建。

于 2010-01-09T22:22:11.230 回答
0

模型视图控制器,用于将业务逻辑与表示层分离,以减少不必要的紧耦合。在c2.com维基百科
上查看更多信息

于 2010-01-09T21:50:37.270 回答
0

我不知道从哪里开始,因为你会发现到处都是模式(最终,在引擎盖下)。但是让我们试试:

  • 我猜大多数(全部?)MVC 框架都使用前端控制器命令[GoF] 模式。
  • 在分布式应用程序中,使用基于Facade [GoF] 设计模式的Session Facade (用 Java 中的 Session Bean 实现)是非常普遍的。
  • ORM 实现了工作单元[PoEAA] 模式( Java 世界中的Hibernate Session、Toplink UnitOfWork、JDO )。PersistenceManager
  • 对数据访问层使用数据访问对象模式仍然非常频繁。抽象工厂[GoF] 和工厂方法[GoF] 是相关的模式。
  • 等等等等
于 2010-01-10T00:04:19.180 回答
0

我发现这很有用:http: //misko.hevery.com/code-reviewers-guide/ 这与您提出的问题无关,而是解决了上面列出的一些设计模式。我强烈推荐阅读pdf书!

希望这有帮助

于 2012-03-07T21:01:18.603 回答