2

我試圖找出什麼最好的方法是在PHP中規範模式,其中規範可以(可選)通過轉換爲PHP。PHP規範模式,允許轉換爲SQL

我正在探索一些新的方向,正在測試他們的工作能力。代碼和想法在我的腦海中仍然很不清楚。

最小的接口將是這樣的:

interface IRepository { 
    public function get(ISpecification $specification); 
} 

interface ISpecification { 
    public function isSatisfiedBy($candidate); 
} 

如果倉庫隱藏SQL數據庫規範將需要轉換爲SQL。添加 - > toSQL()方法似乎是特別的。一個翻譯規範的類也是一個選項,但是最終生成sql似乎有很多開銷。

意見讚賞。

回答

1

從POEAA(pg.324)報價:

在內部,Repository結合Metadata Mapping (329)Query Object (316)自動生成從標準SQL代碼。無論標準知道如何將它們自己添加到查詢中,查詢對象(316)知道如何合併標準對象,或者本身控制交互是實現細節。

標準這個描述是當然,你Specification pattern的。如果應用程序相對較小,我會說你對標準對象使用toSQL方法的建議方法很好。就像你已經說過的,去其他路線比較困難,但它也提供了更大的靈活性和解耦。最後,只有你可以決定。