物件導向裡類方法歸屬問題處理

2021-08-11 19:38:58 字數 622 閱讀 6453

裡面有講到:

我舉乙個例子:

現在有兩個類,乙個使用者類(user),乙個部落格類(blog),現在有乙個發布部落格的方法(publish)。

那麼,「發布部落格」這個方法,究竟是應該放在使用者的類裡面,還是部落格的類裡面?即:究竟是user.publish(blog)呢,還是blog.publish()?

首先我們不能把物件導向簡單化了。oo不是簡單的把現實的事件來做乙個動謂分解。使用者發布部落格,不能簡單的就是乙個使用者類,然後乙個發布的方法。如果這樣簡單粗暴的話,那oo也就太容易了。

這塊個人認為應結合領域驅動來分析問題。這種不知道放在哪個領域物件上的行為,一般都是比較複雜的業務,可能會涉及多個entity及外部資源呼叫,所以使用者發布部落格可以提取成domain層的乙個服務,如blogpulishservice(此服務應歸屬於blog 聚合類所在的bc)。它應該呼叫下層相應的領域模型來實現,相關業務包括如部落格內容的審核,部落格的狀態更新,粉絲訊息通知等。這個發布部落格事件可以用乙個pipline來實現。

通過對發布部落格這個事件的進一步業務分析,設計出更合理的領域模型才應該是oo所關注的重點。

另:「發布部落格」業務可以產生乙個「blogpublished」事件。其它業務可以訂閱這個事件。設計上方便解耦。

物件導向 類方法和靜態方法

1 類方法 是類擁有的方法,需要用裝飾器 classmethod來標識其為類方法,對於類方法,第乙個引數必須是類物件,一般以cls 作為第乙個引數 當然可以用其他名稱的變數作為其第乙個引數,但是大部分人都習慣以 cls 作為第乙個引數的名字,就最好用 cls 了 能夠通過例項物件和類物件去訪問 cl...

物件導向 類方法和靜態方法

1.在類定義中,使用 classmethod裝飾器修飾的方法 2.必須至少有乙個引數,且第乙個引數留給了cls,cls指代呼叫者即類自身 3.cls這個識別符號可以是任意合法名稱,但是為了易讀,最好不要修改 4.通過cls可以直接操作類的屬性 1.在類定義中,使用 staticmethod裝飾器修飾...

物件導向 三 靜態方法 類方法

私有許可權 在 屬性 或 方法 前面加上兩個下劃線 類的 私有屬性 和 私有方法 不能通過物件訪問,只能在類的內部 通過self訪問 類的 私有屬性 和 私有方法 不會被子類繼承,class masterworker object def init self self.mifang 古典秘方 sel...