【发布时间】:2008-10-10 00:43:46
【问题描述】:
我正在创建一个将构造并返回一个对象的工厂类。我通常会在数据访问层做所有的数据工作,但我认为我无法达到我的目标并且仍然这样做。我想要做的是使用 SQLDataReader 快速读取数据信息并填充要从工厂返回的对象。这是一个愚蠢的想法吗?有更好的方法吗?如果可能的话,我不希望只从 DAL 返回一个 DataSet,还是性能与可维护性的问题?
【问题讨论】:
我正在创建一个将构造并返回一个对象的工厂类。我通常会在数据访问层做所有的数据工作,但我认为我无法达到我的目标并且仍然这样做。我想要做的是使用 SQLDataReader 快速读取数据信息并填充要从工厂返回的对象。这是一个愚蠢的想法吗?有更好的方法吗?如果可能的话,我不希望只从 DAL 返回一个 DataSet,还是性能与可维护性的问题?
【问题讨论】:
在大多数情况下,这是一个好主意,因为这种方式有两个主要好处:
这样你就可以将数据访问和业务逻辑分开,这意味着如果你改变数据库设计,上层算法不需要改变。
从 OO 的角度来看,您正在将一些纯数据转换为对象,并且还可能向对象添加行为,这使得代码更易于维护和重用。
【讨论】:
如果您确定要使用从 SQLDataReader 加载的所有数据,那么可以,您可以在工厂施工时使用。但是,如果数据集有很多字段,而只会使用其中的一小部分,那么在调用访问器时按需加载数据会更好地利用资源。
也就是说,我建议您在手头有所有“零件”时将其装入工厂,如果不完全正确,您就会知道需要修复什么。始终从可能可行的最简单的事情开始。
【讨论】:
我会说这取决于您对工厂的预期用途。如果这是您的数据访问层上的工厂,它将用于使用数据库中的数据填充业务对象,那么是的,这就是这样做的地方。 (IRepository 模式是这样的……有点)。
如果您的工厂不打算住在您的数据访问代码附近,我会将它们分开。记住Single Responsibility Principle:对象应该只有一个改变的理由。如果工厂只是用数据填充对象,那么这是一个合适的用途,但是如果它除了做其他事情之外还用数据填充对象,那么最好不要添加数据东西。
无论采用哪种方式都需要权衡取舍,所以通常我喜欢尽可能长时间地保持对象尽可能简单。
【讨论】: