我想使用内部接口设计域模型 然后创建受限制的公共接口(对于程序集的用户)
虽然在CSharp中这是可能的,但我仍然遇到与并行接口相关的混乱代码:
public interface IAccount { IList<ITran> Transactions { get; } }
internal interface IAccountInternal : IAccount { IList<ITranInternal> Transactions { get; } }
internal class Account : IAccountInternal { }
这里Account的实现变得非常混乱,因为有许多集合需要双接口等。
此外,我想保证使用内部接口实现公共接口(而不是直接访问具体类)
这一定是一种常见的情况,任何人都可以推荐一种干净的方法吗?
答案 0 :(得分:1)
在dot net 4.0中使用通用接口协方差我设法清理了(注意T参数上的“out”修饰符)
public interface IListReadOnly<out T> : IEnumerable<T> {
int Count { get; }
T this[int index] { get; }
}//class
这让我可以返回类型为公共对象的内部对象集合,因为:
public interface IPublic { }
internal interface IPrivate : IPublic { }
现在可行:
private IListReadOnly<IPrivate> list = ...
public IListReadOnly<IPublic> List { get { return list; } }
答案 1 :(得分:0)
这似乎是一个坏主意,该模型似乎非常复杂。
我的第一个想法是减少对内部接口的需求。如果您将它们用于单元测试,那么我建议仅测试外部(公共)接口,并且基本上完全放弃使用内部接口。
除此之外,如果您可以详细说明内部域模型的需求,可能会帮助其他人更好地回答您的问题。