我想实现典型的三层体系结构。我目前的方法如下

  • DAL-带有EF 4.0和每个实体的存储库。通过接口(interface)
  • 访问
  • 我正在考虑使用POCO对象。我的第一个问题是我应该把那些放在哪里
    文件?在所有其他项目引用的程序集中吗?
  • BLL-如何将数据从DAL传输到BLL,然后再传输到GUI
    如果我在BLL中有大量的Manager类(例如CustomerManager),这是一个好方法吗?这些类将访问BLL中的相应存储库,然后将对象传递给GUI

  • 还是您认为最好将存储库放入BLL并直接从我的say buttoneventhandler访问它们?

    希望你能把一些光带到黑暗中

    最佳答案

    我们在DAL中有 repo 协议(protocol)。 BLL通过接口(interface)引用存储库-因此存储库绑定(bind)到DAL,但与BLL分离。我不知道为什么存储库不能直接位于BLL中。我们将它们包含在DAL中,因为我们没有在其中添加任何逻辑。然后在BLL中有“经理”,它包装了存储库并处理特定于实体的逻辑。

    FWIW实际上我们有一个通用的Repository(Of IEntity),并根据需要使用unity实例化适当的存储库-它非常紧凑且非常优雅。我们所有的POCO实体都实现IEntity,其中包含IdCreatedDate等,这是我们所有实体所共有的。当您需要通用地处理任何类型的实体时,这还会带来其他好处-调用CreatedDate时由存储库设置CreateInstance(),当提交状态为ModifiedDate的实体时Modified由上下文本身设置

    我们将实体保存在一个单独的项目中-DAL和BLL一样都必须能够引用它们。您不希望它们出现在DAL中,因为换出DAL会引起问题。您不能将它们放入BLL中,否则会得到循环引用。实体的配置可以存在于DAL中,因为它是特定于数据源的。

    我们尝试坚持使用原始元素和返回实体的BLL。请注意将实体在UI中保留的时间过长,尤其是在Web应用程序中,因为在将实体返回给BLL进行处理时(即,跨 session 或类似请求中存储的请求),在DAL下您可能具有不同的上下文。可能导致从上下文中附加/分离实体的各种乐趣,并且使您失去一些好处,例如更改跟踪。

    希望能有所帮助,但如果您需要任何澄清,请告诉我

    关于.net - 设计问题POCO对象/DAL访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4136457/

    10-13 05:40