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