我面臨着設計挑戰,我無法以令人滿意的方式解決問題。我有一個包含所有共享ORM對象的類庫程序集(使用EntitySpaces框架)。這些對象用於2個或更多不同的應用程序,這就是它們在自己的程序集中的原因。這個設置對我來說工作正常4年以上。在應用程序中使用DI與共享庫
我還有一些應用程序構建於Microsoft的Patterns &實踐組(P & P)的複合應用程序塊(CAB)上。是的,我知道這真的很老,但我是一名兼職開發人員,一人一店,無法更新現有框架。
這裏是我的問題出現的地方:我一直在行使OO設計技巧,每當做了大量的重構工作時,我都試圖從一種程序方法轉向更多的面向對象方法。當然,面向對象設計的一個主要方面是將操作放在與它們一起工作的數據附近,這意味着我的ORM對象需要在適當的時候添加功能。當我也考慮在CAB中使用P的Object Builder DI容器時,這被證明是一個真正的頭疼者,而且我將移入我的ORM對象的大部分功能都需要訪問我的應用程序公開的服務。
換句話說,假設我有一個名爲「Person」的共享業務對象(原文,我知道),而且我有兩個應用程序與人完全不同。應用程序A提供了一組服務,Person對象需要進行DI'ed以便採取一些當前遍佈我的服務層的方法。應用程序B還具有一組不同的服務,IT需要將其刪除到人員對象中。
考慮到P Object Builder如何使用屬性裝飾和類型反射來解決依賴關係,我沒有看到我能做到這一點。簡而言之,我有一個共享對象,在各種應用程序中使用時,我需要注入依賴關係,以便它可以執行特定於該應用程序的特定操作。
我能想出的唯一方法是從Person對象繼承應用程序A & B中的新類型。然後,我會將我的非共享功能和DI代碼添加到此特定於應用程序的專用Person對象中。現在我寫這個看起來很明顯,但它仍然是我能想出的唯一解決方案,我想在這裏問一下,看看是否有其他人有他們想提出的不同解決方案?
我的解決方案會遇到的一個問題是,我可以看到自己被命名爲我的繼承類型 - 我的意思是......這是一個人,那麼你還會稱它爲什麼?無論如何,希望你會對我有一些想法。另外,我對現有的技術並不在意,說實話,我只是幾乎沒有把握目前我正在使用的技術。所以,如果我說過一些矛盾或混淆的話,我希望你能從後面的文章中明白我的要求。
爲了確保我的理解,由自定義屬性引起的耦合是主要問題? – Brook 2011-05-11 03:04:24
儘管您可以將實現放在OO中的數據附近,但我不確定這是否需要良好的OO設計。事實上有時候這是一個糟糕的主意。 – 2011-05-11 06:17:29
@Brook我認爲問題其實是我想要做的只是不可能(或明智的)!我試圖找到一種將功能添加到共享對象(「Person」)的方法,無需將對象耦合到特定於應用程序的(非共享)接口。當然,我需要將Person對象耦合到它所需要的接口。 – 2011-05-13 17:50:39