2016-10-27 6 views
0

私はOOPで使いこなそうとしていますが、時には私の周りに頭を浮かべることができません。特に、クラスのメソッドを作成する分野で。私はそれが持っているすべての動物や製品を追跡しているAnimal Shelter管理プログラムを作っています。私は現在、製品セクションに機能を適用しようとしています。明確にするために適切な場所にメソッド/コードを置く

enter image description here

:私はウェブショップにある製品のリストを維持し、私はまた、製品のリストを持っているユーザリストを有し、私は、ウェブショップのインスタンスを有するメインフォームで各ユーザーに属します。

私はクラス図について考えていましたが、ユーザーにはsellProduct、buyProductなどのメソッドがあると決めました。これらのメソッドの実装は、ユーザーリストから製品を削除し、製品リストに追加する逆にwebshop(sellProduct)とbuyProductのために。

static Webshop webshop = new Webshop(); 

ユーザークラスがこれらのメソッドを実装しています:

を今、私はウェブショップクラスの静的インスタンスを作成しているので、私のメインフォーム内の他のすべてのクラスがそれにアクセスすることができ、私の解決策では

public void SellProduct(Product product) 
    { 
     products.Remove(product); 
     AnimalForm.Webshop.Products.Add(product); 
    } 

    public void BuyProduct(Product product) 
    { 
     AnimalForm.Webshop.Products.Add(product); 
     products.Add(product); 
    } 

ユーザークラスの製品リストから製品を削除し、webshopの製品リストに追加するだけです。

しかし、私は、これらの2つのルールを、クリックされたボタンのイベントハンドラに入れることはできないと思いましたか?私はメインフォームでこれを行う場合、私はちょうどそれを他のクラスのためにアクセス可能にする静的にするのではなく、webshopのインスタンスを1つだけ作ることができます。しかし、私がクラスで行う唯一のことは、機能のない製品のリストを維持することです。

上記のソリューションでは、私はユーザークラスでこれらのメソッドを持っていますが、ここでそれらを持つ代わりに、webshopクラスでそれらを持つこともできます。

この種の問題は、私が大部分の時代に取り組んでいる問題です。方法を適切な場所に置く。あなたはどうやってこれらの選択肢について考えますか?

+0

あなたの質問は、 OOPを理解するための質問ではなく、ソフトウェア設計パターンの質問。どのようなデザインパターンを使用していますか? MVC? MVVM?わからない?あなたのダイアグラムとイントロは、少なくともOOPの基本を理解していることを示していますが、あなたの質問はイベント処理と、モデルを変更するメソッドの配置についてです。私はあなたのアプリケーションを設計する方法のより良い理解を得るためにデザインパターンを読んでいます。 – Lithium

+0

@Lithium現時点では、リストオブジェクトのシリアライズとデシリアライズにリポジトリパターンを使用しています。フォームとクラスのリストは、リポジトリを持つテキストファイルから読み込まれ、アプリケーションが実行されると、ユーザーはメモリ内のリストに対して操作を実行できます。アプリケーションが閉じると、リスト上のこれらの操作はすべてrepoとともに再び保存されます。しかし、いつも私はこれらのクラスを設計するさまざまな方法を見ており、その瞬間に私は混乱します。私はあなたの答えのために、より多くのデザインパターンを読んでいきます。 – Maikkeyy

答えて

0

私は、製品を購入して販売し、WebShopとユーザーを単純なデータオブジェクトとして残すサービスクラスを追加することをお勧めします。商品の購入および販売を担当するTransactionServiceクラスを持つことができます。そのサービスクラスは、購入(Webshopショップ、製品、ユーザー)メソッドと同様のSellメソッドを持つことができます。このように、TransactionServiceクラスは、関連するすべてのことが起こっていることを確認する責任があります(必要に応じてすべてをロールバックする可能性があります)。

+0

お返事ありがとうございます。したがって、わかりやすくするためには、次のようなメソッドを持つサービスクラスがあります。**購入(Webshopショップ、製品、ユーザー){shop.Products.Remove(product); user.Products.Add(product)} **と売却方法の逆転。 Webshopとユーザークラスを単純なデータオブジェクトとして残すことについて話します。これはほとんどの機能を持たないクラスを持つ良い習慣ですか?それとも問題じゃない? – Maikkeyy

+0

はい、プロパティとメソッドを持たないエンティティを表すデータオブジェクトクラスを持つことをお勧めします –

関連する問題