复杂的实体设计

时间:2011-10-14 09:35:21

标签: c# architecture entity

假设您有一个“DataPackage”的概念,它实际上是一个zip存档。您需要实现一个系统来管理数据包,典型的场景是“导入新的”,“删除现有”等。有理由不能将这些文件存储在数据库中。

问题是 - 如何将“DataPackage”的概念划分为与“数据方面”(与DB相关的东西)和“文件系统方面”(文件相关的东西)分开工作的类?

我正在考虑以下事项:

// data package concept
interface DataPackage {
  string GetFileName();
  DataTime GetDateTimeImported();
}

// data package manager concept
interface DataPackageManager {
  DataPackage[] GetAllDataPackages();
  DataPackage ImportDataPackage(string sourceFileName);
  void DeleteDataPackage(DataPackage dataPackage);
}

// data package database aspect
interface DataPackageData {
  int GetId();
  void SetFileName(string fileName);
  string GetFileName();
}

// data package database manager
interface DataPackageDataManager {
  DataPackageData[] GetAllDataPackagesDatas();
  DataPackageData CreateDataPackageData();
  void DeleteDataPackageData(DataPackageData data);
}

// also, similar 2 classes for DataPackage's filesystem aspect
// these would be responsible for copying files, removing files, etc

如果我试图解决的问题是DataPackageDataPackageManager的“尽可能简单”的实现,这是正常的设计吗?我目前在DataPackageDataPackageManager中实现了所有这些内容,并思考我在这里建议的内容是否比我的内容更好。

1 个答案:

答案 0 :(得分:1)

如何将DataPackage封装到两个不同的类中,一个用于数据库相关的东西,另一个用于与文件相关的操作。

DBDataPackageManager {
DataPackage dataPackage;
//get, set, remove, modify etc etc
}

FileDataPackageManager {
//file operations on DataPackage object.
}