2011-10-14 47 views
3

假設您有一個「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中實施了所有這些內容,並且考慮我在這裏提出的是否比我擁有的更好。

+2

你似乎已經做到了,所以我真的不知道問題出在哪裏。 –

+0

如果只是關於C#那麼:int GetId() - > int Id {get; set;}。 GetId(),GetAllDataPackagesDatas()等 - 似乎是java風格的。只要有可能/適當,最好使用屬性替代方法。 –

回答

1

如何將DataPackage封裝到兩個不同的類中,一個用於數據庫相關的東西,另一個用於File相關的操作。

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

FileDataPackageManager { 
//file operations on DataPackage object. 
}