当前位置:  开发笔记 > 编程语言 > 正文

指示一个类是否在Perl中实现接口有多重要?

如何解决《指示一个类是否在Perl中实现接口有多重要?》经验,为你挑选了0个好方法。

我和朋友一直在讨论代码风格问题.我们有一系列通过命名子例程返回特定类型值来实现接口的包.例如:

package Foo::Type::Bar;
sub generate_foo {
    # about 5-100 lines of code
    return stuff here;
}

所以你可以去:

my $bar_foo = Foo::Type::Bar->generate_foo;
my $baz_foo = Foo::Type::Baz->generate_foo;

我们有很多这些,都在同一Foo::Type::*层次结构下.

我认为包应该清楚地表明它们实现了foo_generate接口,例如:

package Foo::Type::Bar;
use base 'Foo::Type';
sub generate_foo {
    ...
    return stuff here;
}

我认为这是一种很好的代码风格,对于其他编写代码的程序员来说更加清晰和干净.它还允许您检查Foo::Type::Bar->isa('Foo::Type')它是否实现了接口(子系统的其他部分完全是OO).

我的朋友不同意.他提出的一些论点是:

Foo::Type::* 包清楚地命名,并且仅在内部项目中使用,因此不存在想知道给定包是否实现接口的问题

这些软件包通常很小,是独立子系统的一部分,他们觉得像批处理文件或conf文件,而不是沉重的Perl OO代码

Perl通过继承表达实现,这可能很复杂或有问题,特别是当一个人获得多重继承时

添加Foo::Type超类不会添加任何值,因为它实际上是一个空包,仅用于启用->isa查找

以编程方式指示接口实现是个人代码风格的问题

我们中的一个人是"正确的"吗?你会怎么做?

编辑:在示例中,将Foo :: Generator重命名为Foo :: Type

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有