Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 标记(或“标记”)接口是否过时?_Oop_Theory - Fatal编程技术网

Oop 标记(或“标记”)接口是否过时?

Oop 标记(或“标记”)接口是否过时?,oop,theory,Oop,Theory,我试图帮助同事接受OO,我发现在某些情况下,很难找到标签(或标记)接口概念的真实例子。(不包含方法的接口;仅用作标记、标记或标签)。虽然这对我们的讨论来说并不重要,但我们使用PHP作为讨论背后的平台(因为它是我们之间的共同语言)。我可能不是教OO的最佳人选,因为我的大部分背景都是高度理论化的,大约15岁,但我就是他所拥有的 在任何情况下,我发现关于标记接口的讨论很少,这让我相信它甚至没有被充分利用来保证讨论。我错了吗?标签接口在Java中使用(Serializable就是一个明显的例子)。C#甚

我试图帮助同事接受OO,我发现在某些情况下,很难找到标签(或标记)接口概念的真实例子。(不包含方法的接口;仅用作标记、标记或标签)。虽然这对我们的讨论来说并不重要,但我们使用PHP作为讨论背后的平台(因为它是我们之间的共同语言)。我可能不是教OO的最佳人选,因为我的大部分背景都是高度理论化的,大约15岁,但我就是他所拥有的


在任何情况下,我发现关于标记接口的讨论很少,这让我相信它甚至没有被充分利用来保证讨论。我错了吗?

标签接口在Java中使用(Serializable就是一个明显的例子)。C#甚至Java似乎正在远离这一点,尽管它支持属性,属性可以完成同样的事情,但也可以做更多的事情

我仍然认为在其他没有.NET和Java的属性概念的语言中,它们还有一席之地

预计到达时间:

通常,当您有一个暗示实现的接口时,您会使用它,但您不希望实现该接口的类实际上必须提供该实现

一些现实世界的例子:

Serializable是一个很好的例子——它意味着(在某处)有一个实现可以序列化对象数据,但是因为有一个通用的实现可以实现,所以实际上不需要让对象实现该功能本身

另一个例子可能是网页缓存系统。假设您有一个“Page”对象和一个“RequestHandler”对象。RequestHandler接受页面请求,查找/创建相应的页面对象,调用页面对象上的Render()方法,并将结果发送到浏览器


现在,假设您想要实现呈现页面的缓存。但问题是有些页面是动态的,因此无法缓存。实现这一点的一种方法是让可缓存页面对象实现一个可ICacheable“tag”接口(反之亦然,您可以拥有一个inotcachable接口)。然后,RequestHandler将检查页面是否实现了iCachable,如果实现了,它将在调用Render()后缓存结果,并在该页面的后续请求中提供这些缓存结果。

我称自己为OO程序员,我从来没有听说过标签接口。

我在表示SQL数据库的对象模型中使用过几次标签接口。在这些实例中,它是特定类型对象的根接口的子类型。检查标记接口比检查属性更容易(“obj是接口”而不是使用反射)

我认为标记接口值得讨论,因为它们是接口概念的一个有趣的角落。不过,它们很少使用也值得注意

.Net标记接口中的非常适合与反射和扩展方法一起使用。标记接口通常是没有任何方法的接口。它们可以让你看到一个物体是否是某种类型的,而不需要在你的物体上反射


.Net Framework中的一个示例是ASP.Net的一部分。

该.Net样式指南说使用属性,而不是标记/标记接口



来源:

或者Cwalina建议的任何其他暴露点,比如这本书

在过去的一个月里,我已经使用了两次标签界面。他们可以在重构时解决一些棘手的问题,使函数更通用


这就是说,我刚刚发现的另一件事是使用标记接口作为一个父类来创建一组具有方法的相关接口。可以传递对象,各种预处理器可以检查是否需要处理特定对象。一种将处理保持在其所属的单独对象中的方法,但将处理对象的实现细节保留在其所属的定义中。

我同意,尤其是最后一句话。频繁使用标记接口可能表明对象模型设计不当。@Eric。。。我不得不不同意你的看法。标记接口可能非常有用。另一种不使用属性获取编译时元数据的方法。。。以压倒优势投票。看起来他们在询问的标签接口是否有用。我想使用它们的一个例子是一件坏事。我发现标记接口有用的其他原因是伪造多重和静态继承。反对票是因为这个答案中给出的建议与MS推荐的设计指南直接冲突。框架设计指南说:不要使用空接口;不要使用属性。不是我不同意这个答案;我认为这实际上是有害的。那本指南是什么时候写的。在.NET3.5问世之前,我会考虑同意这个观点。如果通用过滤器被更新以与属性匹配,我可以考虑改变回。但同时,要想知道一个对象是否属于某一特定类型,比列举你想要的对象的所有属性更容易。这个答案列出了一些非常好的理由,支持标记接口而不是属性。它提供了一个链接,解释了你所说的“标记接口”的含义会有用吗?属性对于扩展方法来说是无用的。如果这是你的意思的话,属性不是接口。这就是为什么标记接口是有用的。(不要做木偶)我不明白你的评论,也不明白你为什么叫我木偶。你是说标记接口是有用的,因为这种用法违背了推荐的做法吗?因为这让开发者感到惊讶?因为这是一种创造性的方式来做属性所做的事情