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

在构造函数中进行冗长的操作会被认为是不好的设计吗?

如何解决《在构造函数中进行冗长的操作会被认为是不好的设计吗?》经验,为你挑选了3个好方法。

我正在实现一个比较目录树的类(在C#中).起初我在类的构造函数中实现了实际的比较.像这样:

DirectoryComparer c = new DirectoryComparer("C:\\Dir1", "C:\\Dir2");

但是在构造函数中执行可能的冗长操作并不感觉"正确".另一种方法是将构造函数设为私有,并添加如下静态方法:

DirectoryComparer c = DirectoryComparer.Compare("C:\\Dir1", "C:\\Dir2");

你怎么看?你期望构造函数"快速"吗?第二个例子是更好的还是只是使类的使用复杂化?

BTW:

我不会将任何答案标记为已被接受,因为我认为没有正确的答案,只有偏好和品味.

编辑:

只是为了澄清我的例子.我不仅对目录不同感兴趣,我也对它们的区别(哪些文件)感兴趣.所以一个简单的int返回值就不够了.cdragon76.myopenid.com的答案实际上非常接近我想要的(+1给你).



1> Peter Lillev..:

我认为两者的结合是"正确的"选择,因为我希望Compare方法返回比较结果,而不是比较器本身.

DirectoryComparer c = new DirectoryComparer();

int equality = c.Compare("C:\\Dir1", "C:\\Dir2");

......正如Dana所提到的,.Net中有一个反映这种模式的IComparer接口.

所述IComparer.Compare因为使用的IComparer类是主要与分拣方法返回一个int.一般模式虽然适合问题的问题:

    构造函数使用(可选)"配置"参数初始化实例

    比较方法采用两个"数据"参数,比较它们并返回"结果"

现在,结果可以是int,bool,diff的集合.无论什么适合需要.



2> Burkhard..:

我更喜欢第二个.

我希望构造函数能够实现类.方法比较实现了它的设计目的.



3> Dana the San..:

我认为界面可能就是你所追求的.我将创建一个表示目录的类,并实现DirectoryComparer接口.该接口将包括比较方法.如果C#已经有一个Comparable接口,你也可以实现它.

在代码中,您的电话将是:

D1 = new Directory("C:\");
..
D1.compare(D2);

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