• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > ASP.NET MVC5 网站开发框架模型、数据存储、业务逻辑(三)

ASP.NET MVC5 网站开发框架模型、数据存储、业务逻辑(三)

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了精通asp.net mvc5,精通asp.net mvc5 pdf,pro asp.net mvc5,asp net mvc5,asp mvc5等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

前面项目的层次和调用关系都说明了,关系如下图

采用三层架构的时候,研究过BLL层的必要性,觉得业务逻辑完全可以在controller里实现,没有必要单独做一个项目,另一个分层多了会影响性能。后来我还是把业务逻辑独立出来,原因如下:

  • 业务逻辑写进controller里代码看着比较混乱,时间久了代码容易理不清。
  • 在controller里直接写逻辑重复代码会不较多,开发效率低。
  • 分项目有利于代码重用,有时候可以直接拿到其他项目中稍作修改就可以用。

对于性能我觉得分层多了肯定会有影响,但是不会很大。现在硬件的更新速度远大于软件,对业务逻辑处理起来很轻松,多实例化几个类对性能影响不大。一般来说网站运行基本上是一个存数据库和取数据库的过程,业务逻辑还是比较少,只不过现在的网站使用的图片、动画更多,效果更加绚丽。我觉得网站的效率瓶颈主要出现在服务器的带宽、IO性能和存取数据库上。在代码方面能做的就是优化数据库的存取。对了一般项目来说,为了百分之几的运行效率远不如提高开发效率和更加容易的代码管理重要,能实现需求就好,运行效率是哪是大牛要做的事。

对IDAL、DAL、IBLL 、BLL这四个项目:

IDAL写一个Base接口,接口中固定几个数据库操作方法,其他接口都继承自这个接口;

DAL项目做个base类实现这个IDAL的base接口,其他类都继承自base类。

同样IBLL中也写一个Base接口,固定几个基本的操作方法,同样其他接口也继承自这个base接口

IBLL中也写一个base类来实现IBLL中的base接口,其他类继承自这个base类。

这里以对用户的操作来构建代码的基本模式:

一、模型
这里写三个模型类。打开Ninesk.Models分别添加User、UserGroup、UserConfig三个模型类。

1、用户模型—User类
用户模型或者叫账户模型,为什么这么说看下面代码

using System;
using System.ComponentModel.DataAnnotations;

namespace Ninesky.Models
{
 /// <summary>
 /// 用户模型
 /// <remarks>
 /// 创建:2014.02.02<br />
 /// 修改:2014.02.05
 /// </remarks>
 /// </summary>
 public class User
 {
  [Key]
  public int UserID { get; set; }

  /// <summary>
  /// 用户名
  /// </summary>
  [Required(ErrorMessage="必填")]
  [StringLength(20,MinimumLength=4,ErrorMessage="{1}到{0}个字符")]
  [Display(Name="用户名")]
  public string UserName { get; set; }

  /// <summary>
  /// 用户组ID
  /// </summary>
  [Required(ErrorMessage = "必填")]
  [Display(Name = "用户组ID")]
  public int GroupID { get; set; }

  /// <summary>
  /// 显示名
  /// </summary>
  [Required(ErrorMessage = "必填")]
  [StringLength(20, MinimumLength = 2, ErrorMessage = "{1}到{0}个字符")]
  [Display(Name = "显示名")]
  public string DisplayName { get; set; }

  /// <summary>
  /// 密码
  /// </summary>
  [Required(ErrorMessage = "必填")]
  [Display(Name = "密码")]
  [DataType(DataType.Password)]
  public string Password { get; set; }

  /// <summary>
  /// 邮箱
  /// </summary>
  [Required(ErrorMessage = "必填")]
  [Display(Name = "邮箱")]
  [DataType(DataType.EmailAddress)]
  public string Email { get; set; }

  /// <summary>
  /// 用户状态<br />
  /// 0正常,1锁定,2未通过邮件验证,3未通过管理员
  /// </summary>
  public int Status { get; set; }

  /// <summary>
  /// 注册时间
  /// </summary>
  public DateTime RegistrationTime { get; set; }

  /// <summary>
  /// 上次登陆时间
  /// </summary>
  public DateTime LoginTime { get; set; }

  /// <summary>
  /// 上次登陆IP
  /// </summary>
  public DateTime LoginIP { get; set; }

  public virtual UserGroup Group { get; set; }

 }
}
</div>

这个模型类中只包含用户名、密码、用户组、显示名、邮箱等属性,纯粹是基本的账户信息,目的是让用户注册的时候尽可能的少填信息。其他信息如果需要可以再写新类与账户进行关联,用户需要的时候登录后再进行补填(如:资本资料、个人信息、联系方式等。这里先不考虑这些)。这里的显示名根据需要可以做昵称、真实姓名等来使用。

2、用户组模型—UserGroup类
这个类注意下GroupType,这个用来对用户组进行一下分类的,方便管理,其实没什么特别的意义。我的想法是普通类型就放普通的注册用户的组,如果大的网站允许用户升级的话,限定在这个类型的用户组内。特权组可以放一些vip之类的用户组,需要管理员给予,区别普通用户组,但又没有管理权。管理类型的用户组需要后台管理员给予,可以对文章、评论、咨询进行管理。

using System.ComponentModel.DataAnnotations;

namespace Ninesky.Models
{
 /// <summary>
 /// 用户组
 /// <remarks>
 /// 创建:2014.02.02
 /// 修改:2014.02.08
 /// </remarks>
 /// </summary>
 public class UserGroup
 {
  [Key]
  public int GroupID { get; set; }

  /// <summary>
  /// 名称
  /// </summary>
  [Required(ErrorMessage="必填")]
  [StringLength(20, MinimumLength = 2, ErrorMessage = "{1}到{0}个字")]
  [Display(Name="名称")]
  public string Name { get; set; }

  /// <summary>
  /// 用户组类型<br />
  /// 0普通类型(普通注册用户),1特权类型(像VIP之类的类型),3管理类型(管理权限的类型)
  /// </summary>
  [Required(ErrorMessage = "必填")]
  [Display(Name = "用户组类型")]
  public int GroupType { get; set; }

  /// <summary>
  /// 说明
  /// </summary>
  [Required(ErrorMessage = "必填")]
  [StringLength(50, ErrorMessage = "少于{0}个字")]
  [Display(Name = "说明")]
  public string Description { get; set; }
 }
}
</div>

3、用户配置模型类—UserConfig类
这个类是一些用户配置信息(暂时只考虑了注册设置),在后台管理员处进行设置。

using System.ComponentModel.DataAnnotations;

namespace Ninesky.Models
{
 /// <summary>
 /// 用户配置
 /// <remarks>
 /// 创建:2014.02.06
 /// </remarks>
 /// </summary>
 public class UserConfig
 {
  [Key]
  public int ConfigID { get; set; }

  /// <summary>
  /// 启用注册
  /// </summary>
  [Display(Name = "启用注册")]
  [Required(ErrorMessage="必填")]
  public bool Enabled { get; set; }

  /// <summary>
  /// 禁止使用的用户名<br />
  /// 用户名之间用“|”隔开
  /// </summary>
  [Display(Name = "禁止使用的用户名")]
  public string ProhibitUserName { get; set; }

  /// <summary>
  /// 启用管理员验证
  /// </summary>
  [Display(Name = "启用管理员验证")]
  [Required(ErrorMessage = "必填")]
  public bool EnableAdminVerify { get; set; }

  /// <summary>
  /// 启用邮件验证
  /// </summary>
  [Display(Name = "启用邮件验证")]
  [Required(ErrorMessage = "必填")]
  public bool EnableEmailVerify { get; set; }

  /// <summary>
  /// 默认用户组Id
  /// </summary>
  [Display(Name = "默认用户组Id")]
  [Required(ErrorMessage = "必填")]
  public int DefaultGroupId { get; set; }
 }
}
</div>

二、数据存储层
数据存储层负责与数据库打交道,由于使用了接口产生了两个项目DAL和IDAL。IDAL是接口项目,DAL是接口的实现项目。

在与数据库的方便有一些共同的操作,像添加、修改、删除、查询等。不想在实际写代码的时候在用户类写一遍这些东西,用户组类再写一遍、以后文章、评论都再重复写这些代码。怎么办,弄个基类。以后其他类从基类继承就把这些公共方法继承过来了。

1、IDAL项目
首先打开IDAL项目,添加类InterfaceBaseRepository,代码如下。

using System;
using System.Linq;
using System.Linq.Expressions;

namespace Ninesky.IDAL
{
 /// <summary>
 /// 接口基类
 /// <remarks>创建:2014.02.03 <br />
 /// 修改:2014.02.09</remarks>
 /// </summary>
 /// <typeparam



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ASP.NET MVC5 实现分页查询的示例代码
  • ASP.NET MVC5网站开发管理列表、回复及删除(十三)
  • ASP.NET MVC5网站开发我的咨询列表及添加咨询(十二)
  • ASP.NET MVC5网站开发咨询管理的架构(十一)
  • ASP.NET MVC5网站开发修改及删除文章(十)
  • ASP.NET MVC5网站开发显示文章列表(九)
  • ASP.NET MVC5网站开发添加文章(八)
  • ASP.NET MVC5网站开发文章管理架构(七)
  • ASP.NET MVC5网站开发用户修改资料和密码(六)
  • ASP.NET MVC5网站开发用户登录、注销(五)

相关文章

  • 2017-05-11asp.net 读取配置文件方法
  • 2017-05-11asp.net发送邮件实现方法
  • 2017-05-11asp.net 关于字符串内范围截取的一点方法总结
  • 2017-05-11在ASP.NET 2.0中操作数据之六:编程设置ObjectDataSource的参数值
  • 2017-05-11Asp.net获取服务器指定文件夹目录文件并提供下载的方法
  • 2017-05-11如何创建一个AJAXControlToolKit的扩展控件
  • 2017-05-11利用ASP.NET MVC+Bootstrap搭建个人博客之修复UEditor编辑时Bug(四)
  • 2017-05-11Visual Studio.Net 内幕(6)
  • 2017-05-11asp.net updatepanel 导致JS不能加载,而无法使用的解决方法
  • 2017-05-11深入本机影像生成器(Ngen.exe)工具使用方法详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Asp.net的服务器推技术 (Server Push)
    • ADO.NET中的五个主要对象的详细介绍与应用
    • DropDownList绑定选择数据报错提示异常解决方案
    • 使用asp.net MVC4中的Bundle遇到的问题及解决办法分享
    • HttpResponse的Output与OutputStream、Filter关系与区别介绍
    • ASP.NET 2.0,C#----图像特效处理
    • asp.net ext treepanel 动态加载XML的实现方法
    • 初识ASP.NET Mvc5+EF7的奇妙之旅
    • asp.net xml序列化与反序列化第1/2页
    • ASP.NET中CKEditor与CKFinder的配置使用

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有