5.结果 | 1).启用透明性 | 业务对象可以是使用数 是实现被隐藏在DAO的内部 | 据源,而无须了解该数据源实现 。 | 的具体细节。访问是透明的,原因 | 2).启用更容易的迁移 | DAO层使应用程序更加 现。因而,该迁移只涉及对 个低层存储实现提供一个具 程序提供一个新的工厂实现 | 容易地迁移到一个不同的数据库 DAO层的变化。更进一步说,如 体工厂实现。在这种情况下,迁 。 | 实现。业务对象不了解低层数据实 果使用工厂策略,则有可能为每一 移到不同的迁移实现意味着给应用 | 3).减少业务对象中代码复杂度 | 由于DAO管理所有的数据访问复杂性 代码。所有与实现有关的代码(比如sql语 样做提高了代码的可读性,已经代码生产 | ,它可以简化业务对象和其他使用DAO的客户端中的 句)都被包含在DAO中,而不是包含在业务对象中。这 效率。 | 4).把所有的数据访问集中到一个独立的层。 | 因为所有的数据访问操 实现与应用程序中的其他代 | 作现在被委托给DAO,所有单独的 码相隔离的。这种集中化使应用 | 数据访问层可以被看作把数据访问 程序更容易地维护和管理。 | 5).不适用于容器管理的持久性 | 由于EJB容器用容器管理的持久性(CM 性存储访问。使用容器管理的实体bean的 地提供该功能。然而,当需要组合使用CM | P)来管理实体bean,该容器会自动地服务所有的持久 应用程序不需要DAO层,因为该应用程序服务器透明 P和BMP时,DAO仍旧有用处。 | 6).添加其他层 | DAO会在数据客户端和数据源之间创 便于权衡该模式的好处。但是选择本方法 | 建其他的对象层,其中该数据源需要被设计和实现以 也会带来额外的开销。 | 7).需要类层次设计 | 在使用工厂策略时,我 层次。如果能够确保这种灵 。然而,在实现该工厂策略 厂。 | 们需要设计和实现具体工厂的层 活性,则有必要考虑这种额外的 时,你可以首先考虑工厂方法模 | 次,以及这些工厂产生的具体产品 工作。这样做会增加设计的复杂性 式,然后再根据需要过渡到抽象工 |