MVC4商城项目一:框架设计
代码已托管在 https://code.csdn.net/denghao156/ktnmb_mvc4
先上图,设计模式参考:ddmvc4.codeplex.com


public UnitOfWork()
: base("name=EntitiesDb")
{
this.Configuration.ProxyCreationEnabled = true;
this.Configuration.LazyLoadingEnabled = true;
} public void Commit()
{
base.SaveChanges();
} public void CommitAndRefreshChanges()
{
bool saveFailed = false; do
{
try
{
base.SaveChanges(); saveFailed = false; }
catch (DbUpdateConcurrencyException ex)
{
saveFailed = true; ex.Entries.ToList()
.ForEach(entry =>
{
entry.OriginalValues.SetValues(entry.GetDatabaseValues());
}); }
} while (saveFailed); } public void RollbackChanges()
{
base.ChangeTracker.Entries()
.ToList()
.ForEach(entry => entry.State = EntityState.Unchanged);
}
1.2: Kt.DAL
基础仓储类对UnitOfWork 的引用来实现多个表实体的统一操作。
public class Repository<T> : IRepository<T>
where T : class
{
#region Members IQueryableUnitOfWork _UnitOfWork; #endregion #region Constructor /// <summary>
/// 创建仓储实例
/// </summary>
/// <param name="unitOfWork">Associated Unit Of Work</param>
public Repository(IQueryableUnitOfWork unitOfWork)
{
if (unitOfWork == (IUnitOfWork)null)
throw new ArgumentNullException("unitOfWork"); _UnitOfWork = unitOfWork;
}
1.3:Kt.Respository
User 表仓储类。
public class UserRepository : Repository<User>, IUserRepository
{
public UserRepository(UnitOfWork unitOfWork)
: base(unitOfWork)
{ }
}
1.4:Kt.Service
User 表类的业务层的实现
public class UserService : IUserService
{
private readonly IUserRepository _userRepository;
public UserService(IUserRepository userRepository)
{
this._userRepository = userRepository;
} public UserDto GetUserById(int id)
{
return KtMapper.CreateMap<User, UserDto>(_userRepository.Get(id));
} public void AddUser(UserDto userDto)
{
User user = KtMapper.CreateMap<UserDto, User>(userDto);
_userRepository.Add(user);
_userRepository.UnitOfWork.Commit();
}
二、Castle Windsor DI MVC控制器依赖注入
1.1、Kt.Web
创建注入工厂
/// <summary>
/// 依赖注入工厂
/// </summary>
public class WindsorControllerFactory : DefaultControllerFactory
{
private readonly IKernel kernel; public WindsorControllerFactory(IKernel kernel)
{
this.kernel = kernel;
} public override void ReleaseController(IController controller)
{
kernel.ReleaseComponent(controller);
} protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
if (controllerType == null)
{
throw new HttpException(, string.Format("The controller for path '{0}' could not be found.", requestContext.HttpContext.Request.Path));
}
return (IController)kernel.Resolve(controllerType);
}
}
1.2、 Dependency 注入容器
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Classes.FromThisAssembly()
.BasedOn<IController>()
.LifestyleTransient()); container.Register( Component.For<IQueryableUnitOfWork, UnitOfWork>().ImplementedBy<UnitOfWork>(), Component.For<IUserRepository, UserRepository>().ImplementedBy<UserRepository>(), Component.For<IUserService>().ImplementedBy<UserService>(), AllTypes.FromThisAssembly().BasedOn<IHttpController>().LifestyleTransient() )
.AddFacility<LoggingFacility>(f => f.UseLog4Net()); LoggerFactory.SetCurrent(new TraceSourceLogFactory());
EntityValidatorFactory.SetCurrent(new DataAnnotationsEntityValidatorFactory());
}
1.3、MvcApplication 应用程序启动时控制器的依赖注入容器的实现
public class MvcApplication : System.Web.HttpApplication
{
private readonly IWindsorContainer container; public MvcApplication()
{
this.container =
new WindsorContainer().Install(new Dependency.Dependency());
} public override void Dispose()
{
this.container.Dispose();
base.Dispose();
}
protected void Application_Start()
{ AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles); var controllerFactory = new WindsorControllerFactory(container.Kernel);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
}
}
具体代码的实现见框架源代码:https://code.csdn.net/denghao156/ktnmb_mvc4
预计用的工具有:
- Visual Studio 2012
- ASP.NET MVC 4 with Razor View Engine
- Entity Framework 5.0
- Castle Windsor for DI
- SQL Server 2008/2012
- bootstrapt & JQuery
- automapper
本节参见大神所写,日后想自己做一个商城出来,代码持续更新到 code.csdn.net ……
MVC4商城项目一:框架设计的更多相关文章
- MVC4商城项目三:分部视图在导航条上的应用
写了几天发觉大部分时间用在JS上了,本来想写个musicstore,却加了框架,然后又想用后台,然后又想用上bootstrapt,然后又想弄权限设计,然后又想………… 看来是想多了~ 好吧,最近把后台 ...
- MVC4商城项目四:应用Bundle捆绑压缩技术
从MVC4开始,我们就发现,项目中对Global.asax进行了优化,将原来在MVC3中使用的代码移到了[App_Start]文件夹下,而Global.asax只负责初始化.其中的BundleConf ...
- MVC4商城项目二:用户身份验证的实现
用户身份验证,依赖于 forms 身份验证类:FormsAuthentication,它是一串加密的cookie 来实现对控制器访问限制和登陆页面的访问控制.它在浏览器端是这样子的: 需求:我们要实现 ...
- 【iOS】小项目框架设计(ReactiveCocoa+MVVM+AFNetworking+FMDB)
上一个项目使用到了ReactiveCocoa+MVVM+AFNetworking+FMDB框架设计,从最初的尝试,到后来不断思考和学习,现在对这样一个整体设计还是有了一定了理解与心得.在此与大家分享下 ...
- 仿联想商城laravel实战---1、仿联想商城需求和数据库设计(lavarel如何搭建项目)
仿联想商城laravel实战---1.仿联想商城需求和数据库设计(lavarel如何搭建项目) 一.总结 一句话总结: composer引入lavarel.配置域名.配置apache 1.项目名 le ...
- 品优购商城项目(三)安全框架SpringSecurity
品优购商城项目第三阶段 1.springSecurity的基本用法与shiro类似. 2.BCrypt加密算法比MD5更加智能和安全,能自动加盐再加密,生成的密码是60位比md5的32位更占空间(可以 ...
- python框架Django实战商城项目之工程搭建
项目说明 该电商项目类似于京东商城,主要模块有验证.用户.第三方登录.首页广告.商品.购物车.订单.支付以及后台管理系统. 项目开发模式采用前后端不分离的模式,为了提高搜索引擎排名,页面整体刷新采用j ...
- 游戏UI框架设计(6): 消息传递中心
游戏UI框架设计(6) --消息传递中心 最近一直忙于一个益智类游戏的研发工作,所以博客有段时间没有更新了.经过朋友的督促,决定这两天立刻完成最后的两篇博客讲解(UI框架).说起“消息传递中心”,或者 ...
- ThinkPHP3.2开发仿京东商城项目实战视频教程
ThinkPHP3.2仿京东商城视频教程实战课程,ThinkPHP3.2开发大型商城项目实战视频 第一天 1.项目说明 2.时间插件.XSS过滤.在线编辑器使用 3.商品的删除 4.商品的修改完成-一 ...
随机推荐
- 我和Python的第一次亲密接触 - 零基础入门学习Python001
我和Python的第一次亲密接触 让编程改变世界 Change the world by program 小甲鱼经常说,学习一门编程语言就是要深入其中,要把编程语言想象为你的女朋友你的情人,这样你学习 ...
- RHEL 7.0 修改防火墙配置
RHEL 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 关闭firewall: systemctl stop firewalld.service #停止firewal ...
- expect set timeout -1 永不超时
. ~/.bash_profile passwd='xxx' expect <<! set timeout -1 spawn rsync -avH /webapps/Seeyon/A8/b ...
- UESTC_秋实大哥の恋爱物语 2015 UESTC Training for Search Algorithm & String<Problem K>
K - 秋实大哥の恋爱物语 Time Limit: 5000/2000MS (Java/Others) Memory Limit: 32000/32000KB (Java/Others) Su ...
- NicEdit - WYSIWYG Content Editor, Inline Rich Text Application
NicEdit - WYSIWYG Content Editor, Inline Rich Text Application By calling the nicEditors.allTextarea ...
- go 学习笔记 - sublime text 环境配置
园里已经有了一篇相当不错的配置说明文章,只是现在gosublime不再支持2.x.文章里的操作在sublimetext3 里一样可以使用 文章地址 : http://www.cnblogs.com/s ...
- Struts2(三)——数据在框架中的数据流转问题
一款软件,无在乎对数据的处理.而B/S软件,一般都是用户通过浏览器客户端输入数据,传递到服务器,服务器进行相关处理,然后返回到指定的页面,进行相关显示,完成相关功能.这篇博客重点简述一下Struts2 ...
- OC基础17:归档
"OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.归档即是用某种格式把一个或多个对象保存 ...
- Struts2使用Interceptor实现权限控制的应用实例详解
Struts2使用Interceptor实现权限控制的应用实例详解 拦截器:是Struts2框架的核心,重点之重.因此,对于我们要向彻底学好Struts2.0.读源码和使用拦截器是必不可少的.少说了. ...
- 初学SSH(其一)
其实,之前一直搞不清楚,SSH整合后,Spring框架究竟是怎么连接Hibernate,并且怎么结合Dao层的,后来,我在网上查了资料,Spring+hibernate访问数据库有3种方法: 一. 注 ...