我正在使用一個服務層,直到現在我使用了一個ServiceObject(它實現了ArrayAccess,Iterator,Countable),但我想知道它是否是一個好主意。我的服務方法簽名應該如何?
你能幫:
ArticleService::createArticle($articleData, $userId);
或
ArticleService::createArticle(ServiceObject $data);
其中$data
是:
array(
'title' => 'Lorem ipsum',
'body' => 'Dolor sid amet',
'userId' => 55,
);
的ServiceObject必須爲每一個方法的共同簽名的好處,但是有時它看起來效率不高,並且沒有被廣泛使用,因此失去了它的利益。
有沒有反饋意見?
嗨,謝謝你的回答。這是我的一些想法。我首先使用了一個ServiceObject,因爲它有一些可選的參數,假設客戶端沒有提供一個可以自動生成的slug(後面的想法),我不想在每個參數上使用isset(),所以在它沒有被定義,它返回null,實體會正確處理這個,我的ServiceObject不過是一個ArrayAccess,Iterator和Count的實現,它只是一個普通的php對象,帶有toArray()輔助方法,但是我在我定義該對象的方式中可能是錯誤的。 – JohnT 2011-06-11 13:32:07
關於你的「學習曲線」有趣的另一點是,如果我使用ServiceObject,我需要記錄提供的選項,如'userId','body'等。而對於一個經典的「簽名」,我可以看到方法($ userId,$ body,$ title),它是顯式的(但在進化爲bc原因時更難)。我目前認爲我應該添加PHPDoc來解釋哪些選項可用。當創建一個ServiceObject時,新的ServiceObject(array('userId'=> 1,'body'=>'lorem ipsum')); – JohnT 2011-06-11 13:33:09
(很多評論對不起)另一點是當我只需要一個參數,如'getArticleById($ id)'這是常見的在這裏提供一個整數,所以是值得使用一個ServiceObject太像getArticleById(新的ServiceObject(數組('articleId'=> 1'));因爲它尊重一致性,但是輸入的時間更長,而且大多不是真正有用的,或者我可以只使用整數還是使用整數? – JohnT 2011-06-11 13:37:30