我不太確定標題是否適合我想要放在桌子上的這個問題。模塊化設計和模塊間參考
我打算創建一個Web MVC框架作爲我的畢業論文,並在之前與我的顧問試圖定義一些成就的對話中,他讓我相信我應該在這個項目中選擇一個模塊化設計。
我已經開發了一些東西,停下來分析它有多少模塊化,我不能真正做到這一點,因爲我不知道「模塊化」的真正意義。
有些事情對我來說不是很清楚,比如說,僅僅引用另一個模塊就會炸燬我係統的模塊性?
比方說,我有一個數據庫訪問模塊,它可以選擇使用緩存模塊來存儲複雜查詢的結果。正如任何人都可以看到的,我至少會對緩存模塊有一個命名依賴關係。
在我的「模塊化設計」概念中,我可以分別分配每個組件,並使其與其他人開發的其他組件交互。在這種情況下,我表明,如果有人想使用我的數據庫訪問模塊,他們也必須採用緩存,即使他不會使用它,僅僅是爲了引用/命名的目的。
所以,我想知道這是否真的是模塊化設計呢。
我想出了一種替代方案,就像單獨創建每個組件,甚至不知道其功能並非絕對需要的其他組件的存在。爲了擴展功能,我可以創建一些基於裝飾器和適配器的結構。
要澄清的東西一點點,這裏是一個例子(PHP):
之前
interface Cache {
public function isValid();
public function setValue();
public function getValue();
}
interface CacheManager {
public function get($name);
public function put($name, $value);
}
// Some concrete implementations...
interface DbAccessInterface {
public doComplexOperation();
}
class DbAccess implements DbAccessInterface {
private $cacheManager;
public function __construct(..., CacheManager $cacheManager = null) {
// ...
$this->cacheManager = $cacheManager;
}
public function doComplexOperation() {
if ($this->cacheManager !== null) {
// return from cache if valid
}
// complex operation
}
}
後
interface Cache {
public function isValid();
public function setValue();
public function getValue();
}
interface CacheManager {
public function get($name);
public function put($name, $value);
}
// Some concrete implementations...
interface DbAccessInterface {
public function doComplexOperation();
}
class DbAccess implements DbAccessInterface {
public function __construct(...) {
// ...
}
public function doComplexQuery() {
// complex operation
}
}
// And now the integration module
class CachedDbAcess implements DbAccessInterface {
private $dbAccess;
private $cacheManager;
public function __construct(DbAccessInterface $dbAccess, CacheManager $cacheManager) {
$this->dbAccess = $dbAccess;
$this->cacheManager = $cacheManager;
}
public function doComplexOperation() {
$cache = $this->cacheManager->get("Foo")
if($cache->isValid()) {
return $cache->getValue();
}
// Do complex operation...
}
}
現在我的問題是: 這是最好的解?我應該爲所有沒有作爲要求的模塊一起工作,但可以更有效地做到這一點?
任何人都會以不同的方式做到這一點?
我還有一些更多的問題涉及到這個,但我不知道這是否是一個可接受的問題stackoverflow。
P.S.:英語不是我的第一語言,也許某些部分可以得到一點點迷惑
mvc框架畢業論文?聽起來不錯。 和設計模式:谷歌建立一個插件系統,它幾乎是相同的(抽象類獲得工廠實施)。 –
我想過插件,但不太確定是否是相同的東西。插件是爲了擴展系統的功能,在我的情況下,它將成爲系統的一部分。 –
您可以根據需要評分一些插件。我認爲它是作爲抽象類的實現,比如db-interface和sqlite-plugin或者帶標準插件的mysql-plugin作爲普通接口。 –