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.商品的修改完成-一 ...
随机推荐
- github orgmode
http://blog.nicky1605.com/application-github-page.html http://dayigu.github.io/WhyUseOrgModeToWriteB ...
- SqlCommand类
一.常用属性 CommandText 获取或设置要对数据源执行的 Transact-SQL 语句.表名或存储过程. CommandTimeout 获取或设置在终止执行命令的尝试并生成错误之前的等待时间 ...
- 【转】在Eclipse中安装和使用TFS插件
文章地址:http://www.cnblogs.com/judastree/archive/2012/09/05/2672640.html 问题: 在Eclipse中安装和使用TFS插件. 解决过程: ...
- Binary Tree Paths 解答
Question Given a binary tree, return all root-to-leaf paths. For example, given the following binary ...
- Struts2 学习笔记 10 Result部分 part1
1.关于Result我们首先来学习一下结果类型 result type. 先来看struts.xml. struts.xml <?xml version="1.0" enco ...
- HBase 3、HBase练习题
1.建立学生和课程表 要求:学生可以选择多个课程,每个课程可以被多个学生选择. 查询某个学生所选的所有课程列表 查询某个课程,的学生列表 学生可以修改所选的课程 方案:学生与课程之间是多对多关系,那可 ...
- HDU-1016-素数环
/* 将1-n个数放在环中,保证相邻的两个数的和是素数 第一个数字永远是1 就这两个约束条件 第一个难点是计算素数: 参考文献: http://c.biancheng.net/cpp/html/254 ...
- UGUI Button控件
今天一起来学习下Button控件, Button控件其实是由Text,Button,Image组件形成的. 这里就简单介绍下Button组件 Interactable: 代表该组件是否进行交互, 我们 ...
- Cocos2d-X中实现菜单特效
Cocos2d-X中能够讲菜单和动作结合起来使用实现菜单特效 程序实例1:使用菜单和动作的组合实现菜单特效<一> #include "MenuItem.h" CCSce ...
- Android项目能运行,上传svn后再下载却不能运行
今天遇到一个比较奇怪的问题,android项目上传到svn之前,可以运行,但是上传到svn后再check, 就出错. 搜索了一下,发现真的解决了问题. svn 不知道是出于什么原因,不能上传.so文件 ...