解决方案的结构一般是三个解决方案文件夹,分别是:

  Models

  ViewModels

  Views

当然需要的话可以扩充,如Services、UnitTest等等。

  然后每个解决方案文件夹里面包含各自的项目,项目里面的命名空间名自动跟随项目名,而不跟随解决方案文件夹名,而且用解决方案文件夹的好处就是解决方案不提供物理管理,只提供逻辑关联,所以在项目文件夹里是找不到解决方案文件夹的;解决方案文件夹可以右键直接编译,不同于普通的物理文件夹,普通的物理文件夹只能创建在项目下面,里面不可以再添加项目文件,而且不可以右键编译,这是他们两个的区别所在。

  Models里包含的是数据以及数据是怎么来的,包括访问数据库,xml等等,这里面都是类库,不涉及任何UI的东东。

  Views里面包含的是所有的UI,这里面都是界面,包括字体、Style、图片、动画、窗体、用户控件等,数据要怎么展示给用户,都在这里面,并且这里面只包含“纯UI”的代码,不涉及任何处理数据的代码。Views里面的每个工程的结构一般为:

  Fonts

  Images

  Styles

  UserControls

  Windows

  App.xaml

  ViewModels里包含的是所有的逻辑,Models里的数据怎么组织、处理、调用、供给界面展示,都在这一层,如我之前所说,ViewModel其实意为“Model for View”,View里的UI全部、或者部分,直接、或者间接地把它的DataContext指向这里,所以这里的数据、方法、属性、命令、事件一般是为Views里的某个UI定制的,也可以是为某“一群”UI定制,这个看具体的需要,如果很多地方用到同一个逻辑,不妨抽象出一个公用的ViewModel,如a界面的ComBox要一个部门的列表作为数据源,b界面也有一个ComBox需要同样的部门列表,c界面也需要,那就把这个逻辑抽象出来公用。

  为何要分出这么多项目,其实源自于CS程序的软肋。CS的东东,交付用户了,很开心,出Bug了,修改,然后重新发布到用户手里,重装,这是个很费事的过程,不像BS的,完全没有这困扰。把逻辑从UI的项目里抽出来,到最后就是一堆exe和dll,只要不涉及本质性的改动,哪个出问题了改哪个,到时候直接替换。

  另外,每个项目的生成路径最后都指定到根目录下的Debug文件夹,方便打包和资源的归总。并且使用SVN的话,每个项目下的Debug文件夹是不用提交到服务器的,这个东东每次都会自动生成的。

MVVM解决方案的一般结构的更多相关文章

  1. [转]Vs解决方案的目录结构设置和管理

    原文地址:[转]Vs解决方案的目录结构设置和管理 作者:大明   以下内容为“原创”+“转载” 首先,解决方案和项目文件夹包含关系(c++项目): VS解决方案和各个项目文件夹以及解决方案和各个项目对 ...

  2. Vs 2008 解决方案的目录结构设置和管理(转)

    http://blog.csdn.net/lcj_cjfykx/article/details/8632459 MS的这个IDE,实在庞杂得恐怖.从大学开始,我就一直用VC的各个版本写程序至今,细细想 ...

  3. VC 2005 解决方案的目录结构设置和管理

    VC 2005 解决方案的目录结构设置和管理   Roger (roger2yi@gmail.com)   一个中等规模的解决方案通常都会包含多个项目,其中一些项目产出静态库,一些产出动态库,一些用于 ...

  4. VS解决方案的目录结构设置和管理

    一个中等规模的解决方案通常都会包含多个项目,其中一些项目产出静态库,一些产出动态库,一些用于单元测试,还有的产出最终的应用程序执行档.除此以外,根据项目的需求,还会使用一些第三方的库.   所以为解决 ...

  5. Visual Studio解决方案的目录结构设置和管理

    摘至:http://blog.csdn.net/lp310018931/article/details/47991759 首先,解决方案和项目文件夹包含关系(c++项目): VS解决方案和各个项目文件 ...

  6. Visual C++ 设置适合自己的解决方案目录结构

    Visual C++ 使用解决方案来管理项目,项目之间还可能有依赖关系,设置适合自己的解决方案目录结构,便于代码的管理.程序的发布. 下面开始一个虚拟解决方案设计:         假设此解决方案有应 ...

  7. 前端MVVM框架avalon揭秘 - 双向绑定原理

    avalon大家可能不熟悉,但是Knockout估计或多或少听过用过,那么说说KO的几个概念 监控属性(Observables)和依赖跟踪(Dependency tracking) 声明式绑定(Dec ...

  8. c结构体初始化问题

    结构体中的数组的初始化问题 我的代码 C/C++ code #include <stdio.h> #include <stdlib.h> struct a { int leng ...

  9. 听翁恺老师mooc笔记(11)--结构和函数

    结构作为函数参数: 声明了一个结构就有了一种自定义的数据类型,这个数据类型和int.float.double一样,int等基本类型可以作为函数的参数,那么这种个自定义的结构类型也应该可以作为函数参数, ...

随机推荐

  1. (六) 6.1 Neurons Networks Representation

    面对复杂的非线性可分的样本是,使用浅层分类器如Logistic等需要对样本进行复杂的映射,使得样本在映射后的空间是线性可分的,但在原始空间,分类边界可能是复杂的曲线.比如下图的样本只是在2维情形下的示 ...

  2. AIX 第4章 指令记录

    root@db:/#lsdev -Cc disk --查看磁盘设备信息   -C customized -c class hdisk0       Available 00-08-00 SAS Dis ...

  3. 【转】linux设备驱动程序之简单字符设备驱动

    原文网址:http://www.cnblogs.com/geneil/archive/2011/12/03/2272869.html 一.linux系统将设备分为3类:字符设备.块设备.网络设备.使用 ...

  4. web app 页面旋转整体样式问题

    $(window).bind("orientationchange", function (event) { if (event.orientation) { //portrait ...

  5. Eclipse安装配置PyDev插件

    Eclipse安装配置PyDev插件 关于PyDev PyDev是一个功能强大的 Eclipse插件,使用户可用 Eclipse 来进行 Python 应用程序的开发和调试.PyDev 插件的出现方便 ...

  6. Android百度地图开发(三)范围搜索

    // 1.新建项目 将地图API添加进classpath中: 2.在activity_main.xml中添加一个MapView,用来显示地图: <LinearLayout xmlns:andro ...

  7. grails下的httpclient

    httpclient已经发布到4.3版本了,其中的API发生了巨大的变化,尤其是对于关闭连接显得更加容易理解,比如引入了CloseableHttpResponse. 然而grails2.3.2中自带了 ...

  8. 反汇编一个简单的C程序

    一.实验截图 二.汇编代码分析: cpu首先执行main函数里的pushl %ebp和movl %esp %ebp.如下图: esp减去4就是向上移动4位到1,如下图: 把1赋值给esp,如下图: c ...

  9. servicestack操作redis

    tatic void Main(string[] args) { );//redis服务IP和端口 #region =insert= var storeMembers = new List<st ...

  10. 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程08:虚拟键盘实现》--本系列完结

    8.虚拟键盘实现 概述: 硬键盘就是物理键盘,平时敲的那种.软键盘是虚拟的键盘,不是在键盘上,而是在"屏幕"上.虚拟按键就是虚拟键盘的一部分,根据功能需求,提供部分按键效果的UI可 ...