Language agnostic 有多少变量对于一个类来说太多了?
我想看看是否有人对我正在编写的类(如中的类)有更好的设计。我们有一个脚本,它将共享文件夹的统计信息放入一个文件中。我正在读这篇文章,并把它放在分享课上 我的老板想知道以下信息:Language agnostic 有多少变量对于一个类来说太多了?,language-agnostic,oop,Language Agnostic,Oop,我想看看是否有人对我正在编写的类(如中的类)有更好的设计。我们有一个脚本,它将共享文件夹的统计信息放入一个文件中。我正在读这篇文章,并把它放在分享课上 我的老板想知道以下信息: 文件总数 文件的总大小 办公室文件的数量 办公室文件的大小 Exe文件数 Exe文件的大小 等等 我有一个带有变量的类,比如$numoficefiles、$sizeOfficeFiles等等,还有大量的get/set方法。难道没有更好的办法吗?如果您有一个包含很多变量/属性的类,那么一般规则是什么 我认为这是一个语言
- 文件总数
- 文件的总大小
- 办公室文件的数量
- 办公室文件的大小
- Exe文件数
- Exe文件的大小
- 等等
就我个人而言,我认为我会这么做。没有“硬”限制。然而,OO设计确实有和的概念。只要您的类是松散耦合和高度内聚的,我相信您可以使用所需的任意多的成员/方法。仅从我所看到的:
如果您保留一个包含所有文件名的数组,那么所有这些变量都可以动态计算。也许我不明白目标,但为什么您要使用变量将所有值加载到内存中,只是为了将它们转储到csv文件(何时?)。我更喜欢无状态侦听器而不是目录,并将值立即写入csv 有时,数据可能只是数据:
files = {
'total': { count: 200, size: 3492834 },
'office': { count: 25, size: 2344 },
'exe': { count: 30, size: 342344 },
...
}
这更像是一个可读性问题 我会将所有数据包装到一个数组中。并且只使用一对get/set方法 比如:
class Test()
{
private $DATA = array();
function set($what,$data) {
$DATA[$what] = $data;
}
function get($what) {
return $this->DATA[$what];
}
}
我总是试图将类看作是我要计算的“容器名称”或“任务名称”。类中的方法是任务的“操作”部分 在这种情况下,您似乎可以开始将事情分组在一起,例如,您多次重复数字和大小操作。为什么不创建一个其他类继承自的超类,例如:
class NameOfSuperClass {
public $type;
function __construct($type) {
$this->type = $type;
$this->getNumber();
$this->getSize();
}
public function getNumber() {
// do something with the type and the number
}
public function getSize() {
// do something with the type and the size
}
}
Class OfficeFiles extends NameOfSuperClass {
function __construct() {
$this->_super("office");
}
}
我不确定这在PHP中是否正确,但你明白我的意思了。事情将开始变得更干净、更易于管理。听起来您可能有大量重复的代码。您需要一系列不同类型的文件的#数量和大小。您可以从如下所示的类开始:
public class FileStats
{
public FileStats(String extension)
{
// logic to discover files goes here
}
public int getSize() { }
public int getNumFiles() { }
}
然后,在主类中,您可以拥有一个包含所有所需文件类型的数组,以及这些辅助对象的集合:
public class Statistics
{
private static final String[] TYPES = { "exe", "doc", "png" };
private Collection<FileStats> stats = new HashSet<FileStats>();
public static void collectStats()
{
stats.clear();
for(String type : TYPES)
stats.add(new FileStats(type));
}
}
每当我在一个类中看到超过5或6个非最终变量时,我就会感到不安 很可能他们应该被放在一个较小的类中,正如非法程序员所建议的那样。也有一个很好的机会,它可以被放在一个哈希表中 这里有一个很好的经验法则:如果你有一个变量,它只有一个setter和一个getter,那么你有数据,而不是代码——把它从你的类中取出,放到一个集合或其他地方 拥有一个带有setter和getter的变量只意味着要么你从未对它做过任何事情(它的数据),要么操纵它的代码在另一个类中(糟糕的OO设计,将变量移动到另一个类) 记住——作为类成员的每一段数据都必须编写特定的代码才能访问;例如,当您将其从对象传输到GUI上的控件时
我经常用一个名字标记GUI控件,这样我就可以迭代一个集合,并自动地将数据从集合传输到屏幕和屏幕,大大减少了样板代码;将数据存储为成员变量会使这个过程更加复杂(需要反射)。我认为变量与字典应该与对象的稀疏性联系起来。如果您在一个永远不会有空白字段的类上使用字典,那么您只是在浪费空间并引入潜在的bug。在这种情况下,我会说数据不够稀疏。C马丁:我自己对字典不满意,更改了答案,以便有一个更简洁的选择。肯定有太多变量的事情-比照上帝类,比照stackOverflowExceptionJimmy,那是什么语言?虽然我也不认识你的语言示例,我完全同意让数据成为数据。把它放到散列中。永远不要创建一个没有业务逻辑方法的类。然后你可能会有一个类来处理你的数据……好吧,你抓到我了,我喜欢无缘无故地输入随机符号。雷莫
public int getNumFiles(String type)
{
return stats.get(type).getNumFiles();
}