我试图找到最好的方法来分离我的域逻辑和我的持久性逻辑的关注点。我正在使用 Linq-2-Sql 进行数据访问,并且一直在关注NerdDinner 教程。如果您查看第 40 页,您可以看到他们正在使用部分类来将业务规则用于他们的 Linq 生成的类。对我来说,这感觉不对(是吗?),我希望拥有自己的 POCO,这些 POCO 暴露在我的应用程序的表示层中。看起来这里的一个选项是使用单独的 DTO 类。这对我来说感觉更好,但它添加了更多代码来测试和维护。
我喜欢简单地添加部分类以在 Linq 类上强制执行业务规则,但我不喜欢将 Linq 类暴露给我的表示层,因为如果数据库发生更改,我也需要更新表示层。
DTO 方法感觉更简洁,因为如果数据库发生更改,我永远不需要更新表示层,但要处理的代码要多得多。
因此,我目前的方法是,两个类库一个带有 Linq-2-Sql DBML + 部分类,第二个带有一组只有自动生成的属性的类,然后是一个“repo”类,用于管理从Linq 组装并将其转换为IQueryable<T>.
有没有更好的办法?有更好的中间立场吗?我可以两全其美吗?如果是这样,您将如何将它们分成不同的程序集?
更新
也许,我真正需要做的是将所有 Persitence/Domain 逻辑整合到一个程序集中(与 NerdDinner 示例中使用的方法相同),然后在我的表示层中创建不同的“视图对象”,它们是非规范化版本我的 Linq-2-Sql 实体?