设计一个简单的文件管理器

Ser*_*cia 5 java oop file

我一直在尝试想出为项目设计文件管理器的最佳方法。我需要使用许多文件实现,并且我有一个由 2 个对象组成的 File 类:数据和描述符。

这是到目前为止我的类图。

正如您所看到的,我有许多不同的 Data 类实现,每个文件组织都有一个实现。所有实现都使用记录来组织其信息,但每种文件(用户、事务等)的字段必须作为元数据存储在各自的描述符文件中。所以基本上我的问题是尝试访问和更新每个文件的描述符。

例如,当尝试从 Stacked 类中的 Users 文件中进行 search() 时,我需要用户描述符文件中的字段(用户名、姓名、姓氏等...),但我无法想出一个很好的设计。我能想到的唯一方法是将描述符引用传递给每个方法(搜索、写入等),但我有一种感觉,我的解决方案将是糟糕的设计。

请注意,我仍然需要继续为不同的文件添加更多的文件组织,所以我想提前计划并有一个很好的文件管理器来以尽可能最好的方式处理所有请求,但目前这就是我想出的。

Wao*_*aog 1

为什么你不应该像你那样做

良好的面向对象设计的主要目标之一是使方法接近它们使用的数据。这导致内聚耦合

反过来,你想做相反的事情。您希望数据存储在与使用这些数据的方法不同的类中。这会导致一种名为“Feature Envy”的代码气味,而您Description的只是一个愚蠢的数据类

我强烈建议您不要保持分离,因为目前的形式没有任何好处。描述只是一个哑巴

如何做得更好

更好的解决方案是融入Description您的Data班级。这样每个类都可以轻松访问其所需的数据。

如何强制实行阶级隔离

如果您想强制分离DescriptionData,您可以使用以下解决方案之一:

  • 添加关联表格DataDescription
  • 使用中介者

PS:你的作品指向了错误的方向。目前,您的数据对象包含文件,而描述符对象包含其他文件。