2016-09-28 22 views
2

エンティティは非常にダムで、データのみを保持しています。私は、すなわちMVPパターンのエンティティを使用する場合のビジネスロジックの配置

  • Movie.findMostWatchedTopTenMovies
  • Movie.hasWatchedThisMovie
  • TheatrePresenter.canScreenMoreMovies

(これらの方法は、いくつかの複雑なロジックが含まれていると仮定し、それだけでゲッターいない)、エンティティやプレゼンター内のいくつかのビジネスロジックを置くために使用されます

これはSOLIDの原則に反しているようですが、テストフレンドリーなコードではありません。 このロジックを置く最も適切な場所はどこですか?クラス名は何をすべきですか?

答えて

0

あなたは正しいですが、これはSOLID原則に反し、モデルはアトミックでなければなりません。つまり、値を保持しており、変更は一切行われません。

Clean Code bookに参照することにより

、あなたがたとえば、あなたは、関連する名前の変更を行い、いくつかのクラスを宣言する必要があります。アイテムの新しいリストがクレートに

class MovieFinder{ 
    public static List<Movie> findMostWatchedTopTenMovies(List<Movie> moviesList){ 

    // do the fining stuff 

    return mostWatchedTopTenMoviesList; 
    } 
} 

も最善のことを行うことで、その結果としてそれを返します。

また、純粋な原子モデルを使用すると、google AutoValueライブラリを使用して、モデルで異常なことをやめさせることができます。 ;)

0

エンティティに関連するBLプロジェクトやクラスでデータ操作/ロジックを実行する必要があります。

私はあなたがDBのような何らかの種類のデータソースを扱っていると推測しているので、データアクセスで同じ分離が必要です。 一般的には、BLにロジック(データ検証など)のみを含め、ロジックを持たないDAL(データアクセスレイヤー)内でのデータアクセスをBLに含める必要があります。例えば

、あなたはMovie実体がある場合:

namespace BO 
{ 
    public class Movie 
    { 
     public string Name{ get; set; } 
     ... 
    } 
} 

namespace BL 
{ 
    public class MovieBL 
    { 
     public Movie GetMovieByName(string name) 
     { 
      return MovieDAL.GetMovieByName(name); 
     } 
    } 
} 
関連する問題