首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >c#命名-后缀区分只读接口和可写接口的常见约定是什么?

c#命名-后缀区分只读接口和可写接口的常见约定是什么?
EN

Software Engineering用户
提问于 2014-05-14 09:09:06
回答 2查看 938关注 0票数 1

假设一个允许在空间树上查询的接口

代码语言:javascript
运行
复制
public ISpatialTree
{
    int FindChildIndex(Vector point);
    bool IsLeaf { get; }
    ICollection<ISpatialTree> Children { get; }
}

另一种允许改变树的方法:

代码语言:javascript
运行
复制
public ISpatialTreeWriter : ISpatialTree
{
    void Add(Vector point);
    bool Remove(Vector point);
    void Clear();
}

我正在寻找一个名称来表示可写界面。理想情况下,它应该是合理的简短和可读的字。它不仅适用于这个示例,而且我想对项目中的所有代码使用约定,因为这是一个常见的情况。

有谁知道这个问题有一个很好的会议吗?在其他项目中使用哪些约定?

讨论过的单词包括Writer (歧义,常用于其他上下文)、Mutator (混淆)、Rw (不可读,而不是一个单词)。

一个很好的解决方案是一个单词,不超过6-8个字母,这就很明显,这是作者的界面。

EN

回答 2

Software Engineering用户

发布于 2014-05-14 10:47:42

作家和突变者是一个糟糕的选择,因为他们意味着变异其他东西。如果更改对象本身,则适当的表单是可写的和可变的。

如果您有一个只读接口,但基础对象可以通过另一个接口进行更改,则该对象不是不可变的。这意味着可变性与不可变性并不是您想要在这里进行的区分。

因此,只有ReadOnly、ReadWrite或Writable仍然存在。由于您根本没有WriteOnly访问权限,所以不需要区分ReadWrite和WriteOnly。ReadWrite不是一个恰当的词,所以我宁愿使用简单的Writable。

按照.NET中现有集合的约定,适当的选择将是IReadOnlySpatialTreeISpatialTree,后者是可写的。

如果您的大多数代码只是读写访问是例外,则可以偏离此约定,使用ISpacialTree作为只读接口,使用IWritableSpacialTree作为可写接口。

票数 7
EN

Software Engineering用户

发布于 2014-05-14 10:09:10

我建议您指定只读接口样式,例如:

代码语言:javascript
运行
复制
interface IReadOnlySpatialTree
{
}

然后,可写接口扩展了它的名称,即:

代码语言:javascript
运行
复制
interface ISpatialTree : IReadOnlySpatialTree
{
}

在不需要只读部分的情况下,很少使用可写接口。如果你不小心,你将得到至少3个接口为每种类型(只读/只写和ReadW区),这不是特别有用,是浪费精力的维护。

拥有只读接口是有用的,因为这些方法大概是纯的,从而简化了缓存和其他方面。这也意味着我们可以确保书写不会发生在无意中。然而,对于一个可写的接口来说,同时阅读也并不重要--只读接口没有副作用。

列表.AsReadOnly框架中有一种非常奇怪的方法,因为MS一开始没有考虑只读。

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

https://softwareengineering.stackexchange.com/questions/239032

复制
相关文章

相似问题

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