2017-02-21 5 views
1

私は同様の質問を見つけることができませんでしたが、これは間違った質問かもしれませんが、私は検索するキーワードを見つけることができませんでした。他の関数で要求オブジェクトと応答オブジェクトをインスタンス化するのは悪いですか?

は例えば、我々は、データベースからの情報にアクセスするための要求/応答のペアのいくつかの並べ替えを持っている(、私を許して、仕事ではない私の選択をVB .NETを使用して、私はちょうど一貫滞在しています)

Public Class ItemAddRequest 
    Public param1 As String = "" 
    Public param2 As String = "" 
End Class 

Public Class ItemAddResponse 
    Public returnParameter As MyItemObject = "" 

    Public Function Invoke(req As ItemAddRequst) 
     ' SQL Queries go here 
     ' Build my returnParameter 
    End Function 
End Class 

これはフロントエンドでフロントエンドに表示する情報を取得するために使用されますが、これらの情報を取得したり、情報を追加したりするためにコード内の他の場所でこれらを使用するのは悪いですか?一般に、私のMyItemObjectのメソッドを使用してこれをモジュール化(発明された単語)して、これを行うことが必要ですが、私たちはすでに少なくとも今のところそれをやっていないように変更する必要がある大量のコレクションを持っています。たとえば、このようなことをしているのです。

Public Class ParentItemAddRequest 
    Public param1 As String = "" 
    Public param2 As String = "" 
End Class 

Public Class ParentItemAddResponse 
    Public returnParameter As MyParentItemObject = "" 

    Public Function Invoke(req As ParentItemAddRequest) 
     ' SQL Query goes here to add parent 
     ' Now also need to add a regular MyItemObject 
     Dim itemReq as new ItemAddRequest() 
     Dim itemResp as new ItemAddResponse() 
     itemReq.param1 = 'whatever 
     itemReq.param2 = 'whatever 

     itemResp.Invoke(itemReq) 

     me.returnParameter = itemResp.returnParameter 

    End Function 
End Class 

これはうまくいくようですが、どのような問題が発生する可能性がありますか?それとも、これは完全に普通のことですか?私たちには奇妙に見えます。助けてくれてありがとう。

答えて

0

このコードがあまり効果がない場合は間違っています。それが壊れていなければ、それを修正しないでください。つまり、このコードで間違っているのは、間違ったパターンを使用しているということだけです。それは間違っているだけです。それが作り出す唯一の問題は、新しい人から地獄を混乱させることです。このように動作するもう一つの深刻な意味は、Classが現在、2つのこと(1)データ契約を宣言する(2)、それを満たすためにalgoを定義することです。この混乱は、ソリッドの原則に惑わされています。責任が混在すると、単体テストや影響分析が難しくなります。

私がRequestクラスとResponseクラスを見つけたら、すぐにあなたたちがDTOパターンを使用しているということです。クラスは命名規則のためにデータコントラクトとみなされます。さて、dtosはビジネスロジックのない単純なPOCOであると考えられています。これは、そのようなすべてのクラスを別々のdllに入れて、異なるクライアントが共有データ構造を使用できるようにするためです。だから私はそこにInvokeメソッドを期待していません。私は、dtoがクラスの手作りのsqlsか、ormのようなエンティティフレームワークを介してDALレイヤーのfilledであると期待します。

手作りのsqlsでは、Class ParentItemDAOのような一連のクラスが期待できます。Function Add(req As AddParentItemRequest) As AddParentItemResponseのようなメソッドがあります。同様に、メソッドFunction GetParentItemByIdは、ビジネスオブジェクトまたはdtoのいずれかを返します。

+0

私はWebサービス(私は大学で共同作業に取り組んでいるジュニア)、特に.NETの新製品(以前のインターンでSpring MVCを使用していました)は比較的新しいので、私の説明のいくつかは確かに私が書いていることは、既に存在する大規模なプロジェクトに基づいているからです。あなたの答えをありがとう! – n8m8

関連する問題