哪里的业务逻辑在MVVM坐?(Where does business logic sit in MV

2019-06-25 09:50发布

我习惯用N层架构,即数据访问层,业务逻辑层,等发展

任何人都可以提供有关我的业务逻辑的最佳位置的任何意见或链接?

难道我把所有这一切都为阶级我Silverlight应用程序的模型文件夹中?

保罗

Answer 1:

业务逻辑,以及其中的数据,典型地是在MVVM模型层的一部分。 视图是视觉效果,并且视图模型是“胶水”,让你与业务特定的逻辑和数据工作。

任何特定于域或企业应该是可重复使用由其他应用程序,使用其他架构。



Answer 2:

这是一个很好的问题,答案将部分是项目的复杂性和开发者的喜好问题。

有些MVVM项目,我已经看到了把一切都放在虚拟机的一部分,所以查看的的.cs文件是空的(因为大家都知道“后台代码”是邪恶的</嘲讽>)和模型文件包含被动的“存储类”(即,C与封装结构基本上)。

它可以是一些简单的项目(如几乎没有任何逻辑观众)一个不错的选择。 但它会导致试图做的一切,这是无法控制的,如果你的项目有任何复杂的斑点状的视图模型。


里德科普塞的回答(业务逻辑/数据访问应该去耦查看/视图模型的)可以与任何显著的复杂项目的最佳解决方案。



Answer 3:

我面临着同样的问题,决定走这条路:我创建类,如控制器在MVC(我的模型来进行一些动作),我在所有的ViewModels与他们合作。

例如:我们的应用程序有一个书单。 我们需要添加/编辑/删除它们。

因此,我们有一个模型:

public class Book 
{
    public int BookId { get; set; }
    public string Title { get; set; }
    public string Author { get; set; }
}

然后我们有一个控制器类:

public class BookController 
{
    string dbPath = ...;

    public void AddBook(string title, string author)
    {
        var book = new Book() { Title = title, Author = author };
        AddBook(book);
    }

    public void DeleteBook(int id)
    {
        using (var db = new SQLiteConnection(dbPath))
        {
            db.Delete<Book>(id);
        }
    }

    public void DeleteBook(Book book)
    {
        using (var db = new SQLiteConnection(dbPath))
        {
            DeleteBook(book.BookId);
        }
    }

    public List<Book> GetAllBooks()
    {
        using (var db = new SQLiteConnection(dbPath))
        {
            return db.Table<Book>().ToList();
        }
    }

    public Book FindBook(string title, string author, int id)
    {
        .....
    }
}

现在,只要我们需要,例如,我们可以用它:

public class BookListViewModel : ViewModelBase 
{
    public BookListViewModel() 
    {
        GetData();    
    }

    private void GetData()
    {
        BookController bc = new BookController(); // here we start using our controller. 
        _books = new List<Book>();
        _books = bc.GetAllBooks();
     }
}

这种方法帮助我们:

  1. 保留所有的业务逻辑分开(在控制器类)
  2. 避免重复代码


文章来源: Where does business logic sit in MVVM?