2013-02-28 55 views
1

我只是好奇加上也是爲了更好的理解SRP,petclinic spring mvc例子有一個大的診所有一個方法,可以讓所有者,寵物和訪問。PetClinic例子破單個責任原則

SRP,從另一方面說,「一個類(這裏的實現類診所/ inetrface本身的)應該做的一個任務定義。所以,後來診所inetrface應該已經分成3個interafces?還是我的SPR /的PetClinic例如錯誤

回答

1

假設你指的是SpringSource的PetClinic example;該文檔說:

的高級業務/持久性API爲的PetClinic是org.springframework.samples.petclinic.Clinic接口。PetClinic中的每個持久性策略都是不同的實現臨牀界面的重要性。

並且它也提到了:

由於PetClinic應用是所有關於數據庫訪問並且在那之外的應用程序很少的業務邏輯,也沒有對主要業務的分離和持久層API。雖然此設計技術不應用於具有更復雜業務邏輯的應用程序,但在此處可以接受,因爲所有非持久性相關的業務規則都已在業務對象中實現,並且未泄漏到持久層中。設計最重要的一面是Business和Persistence Layers完全獨立於表示層。

最後根據其original definition,SRP說

一類應該有一個,且只有一個理由去改變。

因此,設計與SRP一致,因爲診所接口封裝了應用程序的持久性API,並且其實現將僅因所使用的持久性策略/技術的基本變化而改變。另一方面,如上所述,這是一個非常簡單的例子,你猜對了,在一個更復雜的應用程序中,持久性/數據訪問層很可能會被實體分割:通常你最終會得到一個每個主要實體的DAO,所以在PetClinic中就像OwnerDAO,PetDAO,VisitDAO一樣。