与数据库交互的函数的最佳实践

时间:2011-12-15 13:39:05

标签: oop design-patterns

假设我有User个对象,该对象由Usermapper生成。 User对象对使用中的数据库/存储库一无所知(我认为这是一个很好的设计)。

创建User时,我只希望它由映射器填充,包含最简单的内容,例如名称,地址等。但是在对象实例化之后我可能有一个方法userX.getTotalDebt()getTotalDebt()需要重新连接到数据库,因为我不希望为每个用户实例化完成这个相对昂贵的操作(需要多个表等)。如果我只是简单地在getTotalDebt()中插入一些sql,或者将依赖关系返回到Mapper,其中耦合度会非常快地增加。

这有一个明显的好/最佳实践,因为这种情况经常出现,但是我找不到它,或者我从一个错误的角度完全看待这个问题。

1 个答案:

答案 0 :(得分:0)

  

假设我有一个User对象,它由Usermapper生成。 User对象对使用中的数据库/存储库一无所知(我认为这是一个很好的设计)。

它们通常被称为POCO(普通旧CLR对象)。

  

创建用户时,我只希望它由映射器填充最简单的东西,例如姓名,地址等。

有几个OR / M层可以实现这一目标。使用nhibernate或Entity Framework 4.1 Code First。

  

我可能有一个方法userX.getTotalDebt(),getTotalDebt()需要重新连接到数据库

然后它不再是poco了。虽然可以使用透明代理。 EF和nhibernate都支持这个,它叫做Lazy Loading。

  

有一个明显的好/最佳做法,因为这种情况经常出现,但是我找不到它,或者我从错误的角度看待这个问题

我经常保持我的物体愚蠢和断开。我使用Repository模式(即使我使用nhibernate或其他orm),因为它使我的类可以测试。

我要么直接使用存储库类,要么创建一个包含所有逻辑的服务类。这取决于我的应用程序的复杂程度。