2012-02-17 46 views
1

我有一个程序集,其中包含我的Business Objects的基础对象,然后是基于数据库模式自动生成并填充类的另一个程序集。后一个程序集中的类都从前一个类中继承而来。我可以避免引用从现有引用继承的程序集吗?

我的想法是,我可以从其他项目中引用生成的程序集,和“不”与底座组装对象从而隐藏了一些实施细节以及使用这些对象禁止人。

不幸的是,我意识到,除非我引用它,以及我不能使用任何内置到基础功能。所以我的问题是:无论如何,如果没有,那么是否有设计模式可以解决我应该使用的问题?

回答

1

如果你真的不想基类暴露给其他人(认为的可扩展性),那么你应该将基地转移到同一装配为一体的混凝土。

如果您仍然需要组件分开,你仍然可以使基地内,然后设置InternalVisiblesToAttribute基类组件:

(在AssemblyInfo.cs中)

using System.Runtime.CompilerServices; 

[assembly:InternalsVisibleTo("ConcreteClassAssembly")] 
+1

不是一个完美的答案,但可能会尽可能接近我会得到。谢谢。 – 2012-02-17 03:13:57

+0

请让我知道,如果你想或听到更好的! – 2012-02-17 03:15:01

3

问题听起来稍微向后。你正在隐藏你的数据层的业务/领域层?一般来说,这将是另一种方式。

无论哪种方式。这个问题听起来像是你有:

  1. 大会一

    class Bar 
    
  2. 组件B

    class Foo : Bar 
    

组装体C必须引用A和B使用美孚。

接下来的设计原则是支持组合继承

不是富从酒吧继承,美孚可能包含酒吧的一个实例,并揭露什么方法做有意义的富。这都假设Foo实际上并不是Bar的专门版本。

+1

我不知道你是否正确理解,也许我没有清楚地沟通。但问题不在于程序集C必须引用A和B才能使用Foo,问题是程序集C必须在使用Foo时引用A和B才能获得Bar的功能。 – 2012-02-17 03:01:39

+0

此外,A将是数据访问层,B将是域层。那么,从技术上讲,我的代码现在并不是100%真实的,但总的来说就是这样。如果可能的话,我宁愿能够引用B而不必引用A.你让它听起来像我的意思,但其他方式虽然... – 2012-02-17 03:08:21

+1

@BrandonMoore我想我可能一直困惑的措辞。然而在上面的例子中,组件C必须知道Foo和Bar都使用Foo。要不引用程序集A,Foo不能从程序集A中的类继承。 – Jacob 2012-02-17 03:12:29

相关问题