次のオブジェクトがあります: L1User
、L2User
、L3User
(すべて から継承User
) およびDocument
.
すべてのユーザーがドキュメントを作成できますが、ユーザーの種類に応じて、ドキュメントのステータスは異なります。の場合L1User
、ドキュメントはL1
ステータスなど とともに作成されます。
解決策 1ドキュメントが作成された後、それはデータベースに保存されることに注意してください。そのため、オブジェクト
にメソッドを持つのは自然なはずです。メソッド本体で、どのタイプがユーザーであるかを確認し、手動で適切なステータスを設定できました。このようなアプローチは、私にはOOPではないようです。 create_document(User user)
Document
解決策 2
わかりました。次のアプローチは、すべてのユーザーcreate_document(Document doc)
に、ユーザーに関連付けられたステータスを設定し、ドキュメントをデータベースに保存する共通のメソッド (たとえば ) を実装させることです。ここでの疑問は、ドキュメントをユーザーではなく独自のクラスに保存する必要があるということです。
解決策 3
したがって、最終的なアプローチは上記と似ていますが、ユーザーが変更されたドキュメント オブジェクトをそのcreate_document(User user)
メソッドに返し、そこで保存が実行される点が異なります。メソッドの定義は次のようになります。
create_document(User user)
{
this = user.create_document(this);
this->save();
}
また、私には正しくないようです...
誰でもより良いアプローチを提案できますか?