我有一个程序集,其中包含我的Business Objects的基础对象,然后是另一个程序集,它自动生成并使用基于数据库模式的类填充。后一个程序集中的类都继承自前者的类。
我的想法是我可以从其他项目引用生成的程序集,并且“不”使用基础对象的程序集因此隐藏了一些实现细节并禁止人们使用这些对象。
不幸的是,我意识到我不能使用基础中内置的任何功能,除非我也引用它。所以我的问题是:在这周围是否存在,如果没有,那么是否有一种设计模式可以解决这个我应该使用的设计模式?
答案 0 :(得分:3)
问题听起来有点落后。您是否正在使用数据层隐藏业务/域图层?通常情况就是这样。
无论哪种方式。问题听起来像你有:
装配A
class Bar
装配B
class Foo : Bar
程序集C必须引用A和B才能使用Foo。
要遵循的设计原则是赞成合成优于继承。
而不是Foo继承自Bar,Foo可以包含一个Bar实例并公开哪些方法对Foo有意义。这都是假设Foo实际上不是Bar的专用版本。
答案 1 :(得分:1)
如果你真的不想将基类暴露给其他人(想想可扩展性),那么你可能应该将基础移动到与混凝土相同的组件中。
如果仍然需要分隔程序集,仍然可以在内部创建基础,然后在基类程序集上设置InternalVisiblesToAttribute:
(在AssemblyInfo.cs中)
using System.Runtime.CompilerServices;
[assembly:InternalsVisibleTo("ConcreteClassAssembly")]