【问题标题】:Where to put business logic when using entity with MVP pattern使用具有 MVP 模式的实体时将业务逻辑放在哪里
【发布时间】:2016-09-28 16:02:23
【问题描述】:

我的实体非常愚蠢,只保存数据。我曾经将一些业务逻辑放在实体或演示者中,即

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

(假设这些方法包含一些复杂的逻辑,而不仅仅是getter)

但这似乎违反了 SOLID 原则,并且它不是测试友好的代码。 那么这个逻辑放在哪里最合适呢?类名应该是什么?

【问题讨论】:

    标签: java android oop design-patterns mvp


    【解决方案1】:

    你是对的,这违反了 SOLID 原则,你的模型必须是原子的,这意味着它们只保存值,不会自己做任何更改。

    通过引用Clean Code book,您必须声明一些使用相关名称进行您想要的更改的类,例如:

    class MovieFinder{
        public static List<Movie> findMostWatchedTopTenMovies(List<Movie> moviesList){
    
        // do the fining stuff
    
        return mostWatchedTopTenMoviesList;
        }
    }
    

    最好的办法是创建一个新的项目列表并将其作为结果返回。

    另外,为了拥有一个纯原子模型,您可以使用google AutoValue 库,它可以阻止您对模型做不寻常的事情。 ;)

    【讨论】:

      【解决方案2】:

      您应该在与实体相关的 BL 项目和类中进行数据操作/逻辑。

      我假设您正在使用某种数据源,例如数据库,因此您需要对数据访问进行相同的隔离。 通常,您希望您的 BL 仅包含逻辑(例如数据验证),并且您的数据访问发生在没有逻辑的 DAL(数据访问层)内。

      例如,如果您有一个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);
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2010-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-30
        • 2011-08-02
        相关资源
        最近更新 更多