开始动手做这个项目时,发现无法做到完全的先设计、再编码,于是决定分模块进行,从管理员模块开始设计、编码,而且接口就已经改了好几次了。

管理员模块涉及的功能有登录和后台对管理员的维护,其中也涉及前端的开发。UI模板使用Inspinia,感觉这套模板功能丰富、界面美观,而且基于HTML5和BootStrap,对这两方面的知识也可以多些了解。

在上一篇<如何在单元测试时隔离ORM>中,解决了对Service层进行测试怎样构建伪对象的问题,随后管理员模块的Service层和单元测试在齐头并进中完成了;前端基于模板套出的界面也好了。

后台登录界面:

首页:

管理员的维护尚未完成,这儿记录两个之前遇到的问题:HTML5表单的异步提交验证以及关于Autofac待注入对象的初始化的一个问题。

一 HTML5表单的异步提交验证

a) 表单验证

本来计划表单的验证使用ValidForm组件,但遇到了一些莫名其妙无法解决的样式问题,只好使用HTML5自带的表单验证,直接支持email、url等的校验,但对浏览器有限制

另外,即使浏览器支持,但感觉验证并不严密,比如邮箱输入类似email@abc竟然也可以通过验证,所以还是自己写正则表达式靠谱。非空校验要单独添加required属性。

b) 表单异步提交

HTML5原生的校验颜色比ValidForm漂亮,但之前只知道需要点击submit按钮才能触发校验,这是放弃原生校验尝试ValidForm的直接原因,但ValidForm搞不定后,只好寻求HTML异步提交的方法,其实很方便:

在注册的$("#formLogin").submit方法中,使用$(this).ajaxSubmit(options)替换了点击submit时的事件行为,进行ajax异步提交。


二 关于Autofac,在待注入对象的构造函数需要参数时的配置问题

为了在对Service层的单元测试时隔离EF,在Service层和EF操作之间增加了IRepositoty接口及其实现,在初始化AdminUserService时要在其构造函数中传递AdminUserRepository参数

在单元测试时可以手工传递,但在Controller中注入AdminUserService时却不能这样做了,需要配置Autofac在初始化AdminUserService要使用的IRepository<AdminUserEntity>对象。

在AutofacConfig的代码中,最简单的情况是只需要注册Controller和IService接口的实现类,现在则还需要注册以Reposiroty结尾的类(a.Name.EndsWith("Repository")),因为这里规定实现IRepository的类统一以” Repository”结尾,然后通过builder.Register(a => new AdminUserService( (IRepository<AdminUserEntity>)a.Resolve(typeof(IRepository<AdminUserEntity>))))来配置Autofac在初始化AdminUserService类时为构造函数传递的参数为IRepository<AdminUserEntity>。采用这种配置方式的话,意味着后续每当增加新的Service类时都要回到这儿建立手动映射,显然有点不便,应该有更简便的方法有待试验。

最新文章

  1. 一款效果精致的 jQuery 多层滑出菜单插件
  2. js语法
  3. HDU 3555 Bomb 数位DP 入门
  4. 关于&quot;user.dir&quot;的认识
  5. df 和 du 命令详解
  6. 주기적으로 php파일 실행시키기 (PHP 파일 cron 으로 돌리기)
  7. ios的一些开源资源
  8. BZOJ 1485: [HNOI2009]有趣的数列( catalan数 )
  9. windows下php开发环境的搭建
  10. Javascript获取不重复的随机数值
  11. Computed Observable的参数
  12. netty基础--基本收发
  13. 前端面试送命题(二)-callback,promise,generator,async-await
  14. lucene教程【转】【补】
  15. 图解 VS2015 如何打包winform 安装程序
  16. Asp.net core 学习笔记 (授权)
  17. Glide4 高效加载图片的配置【转】
  18. PAT 甲级 1110 Complete Binary Tree
  19. Extjs下拉多选框
  20. 使用JQ实现统计剩余字数

热门文章

  1. Python:线程指南
  2. FactoryMethod工厂方法模式(创建型模式)
  3. 广度优先遍历-BFS、深度优先遍历-DFS
  4. Java之装饰模式
  5. Git学习系列之CentOS上安装Git详细步骤(图文详解)
  6. 详解C#泛型(二)
  7. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(九):代码整理优化
  8. NIO的Buffer&amp;Channel&amp;Selector
  9. linux下的重命名
  10. 【IT笔试面试题整理】堆栈和队列