首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何避免MVVM中的代码重复?

如何避免MVVM中的代码重复?
EN

Stack Overflow用户
提问于 2012-06-17 17:49:36
回答 2查看 450关注 0票数 3

此问题类似于Where does business logic sit in MVVM?

然而,我不想在这上面创建一个评论链

例如,假设我有一个发票表,我想要获取这些数据并对其执行一些分配,以便在2个完全独立的报告和3个屏幕中使用。

在我们当前的web应用程序中,我会将它放在数据服务层中,并且我所有的报告和屏幕都会调用它

在MVVM中,人们似乎建议模型不应该臃肿,而应该将逻辑放在视图模型中。但是在这种情况下,我会重复5次代码吗?

在他对我的另一个问题的回答中,Reed说:“任何特定于域或业务的东西都应该可以被其他应用程序重用,使用其他架构。”

Reed或其他人能澄清我的方法应该是什么吗?MVVM可以与其他架构结合使用吗?

我正在使用Silverlight 5和Simple MVVM Toolkit

保罗

EN

Stack Overflow用户

发布于 2013-04-02 22:35:44

我遇到了同样的问题,并决定走这条路:

我在MVC中创建了像控制器这样的类(使用我的模型执行一些操作),并在所有ViewModels中使用它们。

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

所以我们有一个模型:

代码语言:javascript
复制
public class Book {
public int BookId { get; set; }
public string Title { get; set; }
public string Author { get; set; }
}

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

代码语言:javascript
复制
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)
{
            .....
        }
    }

现在我们可以在需要的任何地方使用它,例如:

代码语言:javascript
复制
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)避免代码重复

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11070404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档