私はOOPバックグラウンドから来ていますので、常にソリューションをモデル化する最良の方法を探しています。私は2つの異なる擬似デザインを提出し、どちらが良いかを尋ねます。具体的にはMVCベースのWebアプリケーションです。コードはpsuedoであり、ユースケースが作成されているので、ビジネス上の問題をどのように解決するかは、実際にはインポートではありません。デザインのスタイルのみ。Webアプリケーションのサービスレイヤー - サービスオブジェクトを非表示にする必要があります
クラシック・サービス・インタフェーススタイル
//create the page, a valid user needs to
CustomPage page = pageService.createCustomPage(session.getUser(), aDocument, "my page", "my content");
page.setLayout(Layout.NORMAL); //set the page layout
page.setPublished(true); //set it to publish
pageService.save(session.getUser(), page); //actually persist new layout and publish
代替隠しサービススタイル
//create a page editable by the user
CustomPage page = pageService.createCustomPage(session.getUser(), aDocument, "my page", "my content");
page.setLayou(Layout.NORMAL); //changes the layout
page.publish(); //publishes the page
の大きな違いは、古典的なスタイルで、CustomPage
はダムのオブジェクトであるということです。それはプロパティを保持し、プロパティの値に基づいていくつかの基本的な振る舞いを保持するだけです。サービスと組み合わせて使用しない限り、オブジェクト自体のインスタンスを持つことは無意味です。代わりのスタイルでは、CustomPage
には、サービスと現在そのサービスを編集しているユーザーに対する隠れた参照が保持されます。だから私はpublish()
オブジェクトはそれ自身のことだけでなく、トランザクションメソッドを呼び出すことができます。
CustomPage
をモデルとして安全に使用することができます。コンテンツを変更するユーザーはトランザクションメソッドを呼び出せませんが、代わりの方法ではコマンドオブジェクトを使用する必要がありますユーザーの入力を収集し、それをオブジェクトに適用します。しかし、別のアプローチでは、開発者にはかなり複雑な問題が発生しません。 page.publish()
は実際にページを公開しており、そのページを行ったユーザーを知りたい場合は、再度提供する必要はありません。
これらのアプローチのどちらが良いか悪いですか?これらのタイプのデザインとトレードオフについて話し合う良いリソースがありますか?