业务对象上的公共和内部接口的模式

本文关键字:内部 接口 模式 对象 业务 | 更新日期: 2023-09-27 17:59:08

我想使用内部接口设计一个域模型然后创建受限制的公共接口(用于程序集的用户)

虽然这在CSharp中是可能的,但我不断遇到与并行接口相关的混乱代码:

public interface IAccount { IList<ITran> Transactions { get; } }
internal interface IAccountInternal : IAccount { IList<ITranInternal> Transactions { get; } }
internal class Account : IAccountInternal { }

在这里,Account的实现变得非常混乱,因为有许多集合需要双接口等。

此外,我想保证公共接口是使用内部接口实现的(而不是直接访问具体类)

这一定是一种常见的情况,有人能推荐一种干净的方法吗?

业务对象上的公共和内部接口的模式

在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; } }

这似乎是个坏主意,那个模型似乎非常复杂。

我的第一个想法是减少对内部接口的需求。如果您将它们用于单元测试,那么我建议只测试外部(公共)接口,而基本上完全放弃使用内部接口。

除此之外,如果你能详细说明对内部域模型的需求,它可能会帮助其他人更好地回答你的问题。