我想实现典型的三层体系结构。我目前的方法如下
文件?在所有其他项目引用的程序集中吗?
如果我在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,其中包含Id
,CreatedDate
等,这是我们所有实体所共有的。当您需要通用地处理任何类型的实体时,这还会带来其他好处-调用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/