Closed. This question is opinion-based。它当前不接受答案。












想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。

4年前关闭。



Improve this question




根据MVVM,模型内部不应有逻辑。假设有一个包含两个属性的Person模型:
public class Person {
    public string Costcenter { get; private set; }
    public User User { get; private set; }
}

用户对象本身包含另一个人员对象,该对象除其他属性外还包含属性“Costcenter”。
public class User {
    public OtherPerson Person {get; private set; }
}

public class OtherPerson {
    public string Costcenter {get; private set; }
}



现在我的实际问题是:谁负责检查“人员成本中心”是否等于“其他人员成本中心”?
Person.Costcenter == Person.User.OtherPerson.Costcenter

可能性不大:
  • ViewModel是负责的
  • 可以在
  • 模型中实现少量代码
  • 可以将检查实现为getter属性

  • public ViewModel(){
        [...]
        public bool IsCostcenterEqual(Person p){
            return p.Costcenter == p.User.OtherPerson.Costcenter;
        }
    }
    
    public class Person {
        public string Costcenter { get; private set; }
        public User User { get; private set; }
        public bool CostcenterEquals(){
            return this.Costcenter == this.User.OtherPerson.Costcenter;
        }
    }
    
    public class Person {
        public string Costcenter { get; private set; }
        public User User { get; private set; }
        public bool IsCostcenterEqualProperty{
            get{
                return this.Costcenter == this.User.OtherPerson.Costcenter;
            }
        }
    }
    

    目前,我不确定这是否只是一个见解,但我正在寻找解决此问题的最佳方法



    编辑1

    我忘了提到我想将我的模型用于EF(如果这很重要)

    最佳答案

    正如其他答案和评论所示,这是一个引起很多热情和观点的话题。没有一种“正确”的方式来做到这一点。

    您可能会认为模型只是一组DTO/POCO,或者您想称呼它们的任何一种。然后,您的持久性和业务逻辑层将驻留在ViewModel中。

    您可以认为模型是一个持久层,仅负责持久化DTO,并且业务逻辑存在于ViewModel中。

    您可能会认为ViewModel仅负责处理View逻辑(应用程序行为),并且Model中存在业务逻辑和持久性。

    您可以担任...等职位。您可能会采用贫乏的数据模型方法;或丰富的数据模型方法等

    没有正确的方法来处理此问题。失去了同样有效的方式。所有方法的两个关键点是:

  • 确定方法并坚持下去。在整个解决方案中保持一致。
  • 无论采用哪种方法,请确保已正确分离各层。
  • 关于c# - 根据MVVM模式-谁负责? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38369901/

    10-13 06:51