Web/企业应用程序中使用的一些最常见的设计模式是什么?为什么使用它们?
注意:回答为什么部分应该基于列出他们倾向于解决的问题?
Web/企业应用程序中使用的一些最常见的设计模式是什么?为什么使用它们?
注意:回答为什么部分应该基于列出他们倾向于解决的问题?
单例模式非常常见。它的主要用途是确保您永远不会实例化超过一个给定类型的对象,这使得它成为全局变量的一个很好的替代品,全局变量具有明显的邪恶声誉。支持和反对 Singleton 有不同程度的争论,有些人声称它与全局变量一样糟糕。
我倾向于自己使用它来处理我通常称为“经理”的广泛对象。例如,在需要多个数据库的大型应用程序中,您不希望一直打开很多连接。我将有一个DatabaseManager
单例类,它将在内部管理与每个数据库的连接。消费对象可以调用一个DatabaseManager::getConnection()
方法,管理者的工作是确保存在单个连接(如果必须打开它),并将其返回给消费对象。
这解决了在整个地方传递全局数据库连接的问题,并具有高效对象使用的附带好处,因为只有一个 DatabaseManager 存在。静态调用意味着它可供任何需要它的消费者使用。
Model-View-Controller 允许业务逻辑和表示层之间的低内聚,这是它的主要价值。
通常每个控制器都是一个Servlet
处理单个页面的 GET/POST 请求,通过呈现正确的视图或将管辖权转移给另一个控制器来响应它们。
Viwer 将控制器传递的数据转换为 Html、Xml、JavaScript、JSON 或任何您喜欢的技术。Viewer 通常是一个Servlet
或一个 Servlet 抽象,如 JSP、ASP 等。
模型是应用程序对其进行操作的数据的特定领域表示。它还可以与为数据提供意义的域逻辑相结合(例如计算生日、总计或购物车购物项目的运费)。模型应该封装数据,无论底层存储设施如何,都可以轻松访问。
由于它与 MVC 的低内聚性,您可以独立地更改、开发和测试每个组件。
当底层存储机制是数据库时,通常会使用这个。基本上,ActiveRecord 的意思是您的所有对象属性都对应于底层数据库中的列,并且每个对象都包含诸如插入、更新、删除(和加载)之类的功能。
因此,每个类都被转换为一个表或一个视图,每个对象成为所述表中的一行。
这样做的原因很简单,因为您的类实现了访问和编辑数据库的方法,您不必编写额外的样板代码。再加上数据库的流行,足以让这种模式保持有趣。
另一个经常使用的是Pools。PoolManager
是一个管理(无论是数据库、工厂方法还是连接)的单例。Resource
PoolManager 保存一组初始化的副本。每当另一个进程或对象通过他请求资源时,PoolManager.acquire()
他会从池中获取其中一个对象。
然后,他操作他的资源副本,并在完成后通过Resource.release()
. 然而,该对象并没有被销毁,它只是返回到池中。
Pools
用于提高性能。
例如,如果有一个工厂方法的检索成本很高(即响应速度很慢),它通常被包装在 a 中PoolManager
,并且N个实例是在初始化时创建的PoolManager
。这样客户就不会觉得底层工厂很慢,因为PoolManager
他们的性能受到了打击。
常用的企业设计模式之一是前端控制器。它需要集中式接入点或入口点。由 J2EE 框架(如 struts、jersey 等)使用,因此开发人员可能不会注意到它。
工厂模式,主要是 factory_object 和 factory_method 非常常见,
例如用于 xml 文档的 DocumentFactory。
工厂模式的目的是简化对象的创建。
我不知道从哪里开始,因为你会发现到处都是模式(最终,在引擎盖下)。但是让我们试试:
我发现这很有用:http: //misko.hevery.com/code-reviewers-guide/ 这与您提出的问题无关,而是解决了上面列出的一些设计模式。我强烈推荐阅读pdf书!
希望这有帮助