这个问题类似于业务逻辑在MVVM中的位置?
但是,我不想在该评论链上创建评论链
例如,假设我有一个发票表,我想获取这些数据并对其执行一些分配,以便在 2 个完全独立的报告和 3 个屏幕中使用。
在我们当前的 Web 应用程序中,我会将其放在数据服务层中,我的所有报告和屏幕都会调用它
在 MVVM 中,人们似乎建议模型不应该臃肿,逻辑应该放在视图模型中。 但是在这种情况下,我要复制代码 5 次?
在回答我的另一个问题时,Reed 指出:"特定于领域或业务的任何内容都应该被其他应用程序重用,使用其他架构。
里德或其他人可以澄清我的方法应该是什么吗? MVVM 可以与其他体系结构结合使用吗?
我正在使用带有简单 MVVM 工具包的 Silverlight 5
保罗
ViewModel 不适用于业务逻辑。它用于用户界面逻辑。顾名思义,它代表视图。如果您有五个不同的报表显示类似的数据,请为这些数据命名,并使所有五个 ViewModels 了解如何使用数据对象。
由于我们谈论的是报告,因此数据被理解为仅显示。ViewModel 可以只是一个简单的数据源,具有最少的用户界面交互,基本上是一个非常薄的层。
我遇到了同样的问题,决定走这条路:
我在 MVC 中创建了类似控制器的类(使用我的模型执行一些操作),并在所有 ViewModel 中使用它们。
例如:我们的应用程序有一个书籍列表。我们需要添加/编辑/删除它们。
所以我们有一个模型:
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();
}
void GetData()
{
BookController bc = new BookController(); // here we start using our controller.
_books = new List<Book>();
_books = bc.GetAllBooks();
}
}
这种方法有助于我们:
1) 单独保留所有业务逻辑(在控制器类中)
2) 避免代码重复