首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >业务对象上的公共和内部接口的模式

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

Stack Overflow用户
提问于 2011-06-12 16:36:30
回答 2查看 399关注 0票数 2

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

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

代码语言:javascript
复制
public interface IAccount { IList<ITran> Transactions { get; } }
internal interface IAccountInternal : IAccount { IList<ITranInternal> Transactions { get; } }
internal class Account : IAccountInternal { }

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

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

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

EN

回答 2

Stack Overflow用户

发布于 2011-06-13 06:48:45

使用.NET4.0中的泛型接口协方差,我设法清理了一些东西(注意T参数上的"out“修饰符)

代码语言:javascript
复制
public interface IListReadOnly<out T> : IEnumerable<T> {
    int Count { get; }
    T this[int index] { get; }
}//class

这使我可以返回类型化为公共对象的内部对象的集合,因为:

代码语言:javascript
复制
public interface IPublic { }
internal interface IPrivate : IPublic { }

现在,它可以工作了:

代码语言:javascript
复制
private IListReadOnly<IPrivate> list = ...
public IListReadOnly<IPublic> List { get { return list; } }
票数 1
EN

Stack Overflow用户

发布于 2011-06-12 21:36:24

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6320977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档