&結束をカップリング、オブジェクト指向設計の原則SOLIDを見てみましょう:
はここに例のために非常に人気のあるMVCデザインパターンです。
OOは、多くの場所で使用することができますが、これに限定されません。ビジネス層。あなたはオブジェクト指向のJavascriptを書くことができます。
私はこのような(C#の)あなたの例のSOドメインをモデル化したいと思います。これは理想的なOOコードであり、現実世界では、ORMのフィールドを公開するなど、いくつかの妥協が行われます。私が見せようとしているのは、各オブジェクトがそのデータを担当しており、誰もそれを直接変更することはできません。彼らはパブリックメソッドの1つを呼び出すことによって、何かを行うオブジェクトを求めなければなりません。
public class User
{
private int _reputation;
private int _downvotes;
public void Downvote(Post post)
{
DecreaseReputation();
IncrementDownvotes();
post.Downvote();
}
public void RegisterDownvote()
{
DecreaseReputation();
}
private void DecreaseReputation()
{
_reputation--;
}
private void IncrementDownvotes()
{
_downvotes++;
}
}
public class Post
{
private int _score;
private User _poster;
public void Downvote()
{
DecreaseScore();
_poster.RegisterDownvote();
}
private void DecreaseScore()
{
_score--;
}
}
ありがとうございました。そのような行為がVoteServiceに属していると言うのは公正でしょうか?サンプルコードの所在を理解しようとしています。私はC#を知らないが、私はいくつかの推論をすることができます。コードは別々のクラスファイル内の個別のスニペット、またはオブジェクトがインスタンス化されて変更される単一の投票クラスの振る舞いのみを表しますか?私は、第4の行動が投票表に投票を書くことでなければならないと私の例では言及しなかった。 – Mohamad
これは従来の3層アーキテクチャ(プレゼンテーション層/ビジネス層/データアクセス層)のビジネス層に属しますが、これは一般的なドメインコードです(DDDのように、一部の人々はDDDが正しく行われたOOPです)。それがDALの懸念事項であるため、永続性(テーブルへの書き込み)はありません。ビジネスにとっては、SQLデータベース、ドキュメントDB、またはRAM内のすべてを、年間であれば書いている場合はそれほど重要ではありませんこのようにデータが失われることを保証することはできません。これは、あなたの懸念を分ける良い方法です。 – driushkin