分享一个Mvc的多层架构Word格式文档下载.docx
- 文档编号:16622250
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:14
- 大小:169.29KB
分享一个Mvc的多层架构Word格式文档下载.docx
《分享一个Mvc的多层架构Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《分享一个Mvc的多层架构Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
是指命令查询职责的分离,是一个小的模式形态,该模式的关键在于:
“一个方法要么是用来改变某个对象的状态的,要么就是返回一个结果,这两者不会同时并存”。
将整个系统分拆为两个部分:
∙Commands(命令)
-改变某一个对象或整个系统的状态(有时也叫做modifiers或者mutators)。
∙Queries(查询)
-返回值并且不会改变对象的状态。
架构图:
不管DDD也好,CQRS也好,其实这两种都不会100%适合所有的项目架构的,这就需要架构师结合项目本身特点及需求有所选择,但是其中的思想我们可以运用在项目的任何地方。
基于消息的分布式:
其实不管使用怎样的架构,加入怎样的架构思想(soa),核心或者是开发者最想达到的就是层次,系统之间的解耦,复杂的东西没人会喜欢。
随着系统的发展,我们的程序会涉及到多台服务器,多种终端,同时为了解耦我们引入了基于消息的分布式架构。
首先,所以系统的通信基于消息,逻辑联系不会涉及到具体的业务实现,同时消息的传递更加的廉价可适配多种终端。
其次,由于所用逻辑只是基于消息实现,迭代的成本也会相对于其他耦合项目更快更方便。
随之Web2.0的到来单一页面展示的信息也更加的丰富,Ajax,js的流行也使得Ui端的操作也愈加变重,于是大家有期望以一种工程的思想去拥抱这种变化,于是MVVM,js的Mvc框架陆续出现。
同时随着移动互联网的兴起,不同终端对于系统的对接也非常重要,于是我们考虑在Ui与Logic之间引入Application或Service层应对不同终端配置。
如:
我们在ClientPresenterLayer上加入WCF适配多种终端提交的订单,都是建立在消息基础之上的,楼主之前做电商系统是针对于来自淘宝,天猫,亚马逊订单时,为避免出现对库中订单并发,产生“超买”情况,采用了在上层Ui与logic层之间引入了OrderChannel层,将不同终端订单进行排队的解决方案。
以上是架设一个能够适配不同需求的架构过程,但是真正的真理是需要大家在实践中,错误中汲取的。
下面是楼主简单的小分层架构,不妥,不足之处希望大家指导斧正。
层次划分:
为了实现单独部署,层次解耦所以层次之间是基于接口实现的。
DataAccess层引入仓储实现统一DTO操作,实现基于Ef:
IRepository:
1.public
interface
IRepository<
T>
where
T:
class
2.
{
3.
IEnumerable<
FindAll(Expression<
Func<
T,bool>
>
exp);
4.
void
Add(T
entity);
5.
Delete(T
6.
Submit();
7.
}
引入RepositoryBase实现接口定义:
RepositoryBase<
:
DbContext
context;
public
RepositoryBase(DbContext
_context)
context
=
_context;
8.
9.
RepositoryBase()
10.
this.context
new
TestDBEntities();
11.
12.
13.
T,
bool>
exp)
14.
15.
return
context.Set<
().Where(exp);
16.
17.
18.
entity)
19.
20.
().Add(entity);
21.
22.
23.
24.
25.
().Remove(entity);
26.
27.
28.
Submit()
29.
30.
context.SaveChanges();
31.
32.
这对于单一的某个仓储我们单独引入其自身的仓储接口:
IUserRepository:
UserTest>
IList<
GetAllById(int
id);
bool
CheckUserExist(UserTest
u);
特定仓储实现:
UserRepository
IUserRepository
id)
using
(TestDBEntities
entities=new
TestDBEntities())
var
users
from
u
in
entities.UserTests
u.ID
==
id
select
u;
users.ToList();
u)
entities
List<
entities.UserTests.Where(ut
=>
ut.UserName
u.UserName
&
ut.UserPassword==u.UserPassword).ToList<
();
users.Count==0
?
false
true;
在Service层同样建立相关接口适配特种服务:
IUserCore:
IUserCore
CommandStatueEnum
UserLogin(IModel
model);
UserRegister(IModel
GetUsers(Expression<
UserTest,
expr);
UserCore:
UserCore
#region
Structure
IUserRepository
_repository;
UserCore(IUserRepository
repository)
this._repository
repository;
#endregion
model)
try
UserLogin
model
as
UserLogin;
UserTest
uTest
UserTest();
uTest.UserName
u.UserName;
uTest.UserPassword
u.Password;
if
(_repository.CheckUserExist(uTest))
CommandStatueEnum.Succeed;
else
CommandStatueEnum.Fail;
catch
(Exception
ex)
throw
ex;
33.
34.
35.
36.
37.
38.
UserTest()
UserName=u.UserName,
UserPassword=u.Password};
39.
_repository.Add(uTest);
40.
_repository.Submit();
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
GetUsers(System.Linq.Expressions.Expression<
expr=null)
51.
52.
_repository.FindAll(expr).ToList<
53.
54.
Controller:
AccountController
Controller
userCore;
AccountController(IUserCore
_userCore)
this.userCore
_userCore;
//
GET:
/Account/
view
ActionResult
Home()
ViewBag.Users
userCore.GetUsers(u=>
u.IsUse==1);
View();
Login()
Register()
Post
[HttpPost]
Login(UserLogin
account)
(userCore.UserLogin(account)
CommandStatueEnum.Succeed)
RedirectToAction("
Home"
);
ExceptionModel.IsExcept
ExceptionModel.Exception
ex.ToString();
ExceptionModel.CreateTime
DateTime.Now;
55.
Register(UserLogin
56.
57.
58.
59.
(userCore.UserRegister(account)
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
对于接口之间我们通过引入IOC工具解耦:
MvcApplication
System.Web.HttpApplication
protected
Application_Start()
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
IOC
builder
ContainerBuilder();
SetupResolveRules(builder);
buil
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 分享 一个 Mvc 多层 架构
![提示](https://static.bdocx.com/images/bang_tan.gif)