初学必看,NFine框架结构加MVC快速开发平台登录流程梳理(附源码)

就在上周,我们公司的大佬让我们熟悉一下NFine框架,参考NFine开发平台学习,于是按照步骤一步步的在电脑上部署平台环境,发布测试。

首先是映入眼中的是登录界面

输入账号密码,登录

界面还是挺友善的,舒适好看,随便点了一点发现功能几乎都没有实现。。

接下来当然是打开项目代码,查看项目目录结构了,如下图:

先给大家讲一下主要的目录结构,还有对应的功能作用,如果大家以前学过java的一些框架像SSH,SSM或者了解MVC设计模式都很容易理解并且上手操作的:

 

01Common 基础结构层

包含NFine.Code(底层核心类)和NFine.Data(数据层),这些都是固定的,我们不需要修改,比如NFine,Data下面的这些接口IRepositoryBase.cs等,我们可以声明仓库接口去继承这些接口,然后用对应类去实现,通过生成类对象进行方法调用,接下来会提。

展示一下IRepositoryBase接口里面的内容:

public interface IRepositoryBase : IDisposable
{
        IRepositoryBase BeginTrans();
        int Commit();
        int Insert<TEntity>(TEntity entity) where TEntity : class, new();
        int Insert<TEntity>(List<TEntity> entitys) where TEntity : class, new();
        int Update<TEntity>(TEntity entity) where TEntity : class, new();
        int Delete<TEntity>(TEntity entity) where TEntity : class, new();
        int Delete<TEntity>(Expression<Func<TEntity, bool>> predicate) where TEntity : class, new();
        TEntity FindEntity<TEntity>(object keyValue) where TEntity : class, new();
        TEntity FindEntity<TEntity>(Expression<Func<TEntity, bool>> predicate) where TEntity : class, new();
        IQueryable<TEntity> IQueryable<TEntity>() where TEntity : class, new();
        IQueryable<TEntity> IQueryable<TEntity>(Expression<Func<TEntity, bool>> predicate) where TEntity : class, new();
        List<TEntity> FindList<TEntity>(string strSql) where TEntity : class, new();
        List<TEntity> FindList<TEntity>(string strSql, DbParameter[] dbParameter) where TEntity : class, new();
        List<TEntity> FindList<TEntity>(Pagination pagination) where TEntity : class, new();
        List<TEntity> FindList<TEntity>(Expression<Func<TEntity, bool>> predicate, Pagination pagination) where TEntity : class, new();
}

03 Domain应用服务

1、NFine.Domain中的03 Entity 里面都是一些bean,类似于javabean,包含表单bean,数据bean,结果bean等

比如我们待会会涉及到的UserEntity

 public class UserEntity : IEntity<UserEntity>, ICreationAudited, IDeleteAudited, IModificationAudited
{
        [DatabaseAttribute("varchar(50)", true, true, false, "", "主键")]
        public string F_Id { get; set; }
        [DatabaseAttribute("varchar(50)", false, false, false, null, "账户")]
        public string F_Account { get; set; }
        [DatabaseAttribute("varchar(50)", false, false, false, null, "姓名")]
        public string F_RealName { get; set; }
        [DatabaseAttribute("varchar(50)", false, false, false, null, "呢称")]
        public string F_NickName { get; set; }
        [DatabaseAttribute("text", false, false, false, null, "头像")]
        public string F_HeadIcon { get; set; }
        [DatabaseAttribute("tinyint", false, false, false, null, "性别")]
        public bool? F_Gender { get; set; }
        [DatabaseAttribute("datetime", false, false, false, null, "生日")]
        public DateTime? F_Birthday { get; set; }
        [DatabaseAttribute("varchar(50)", false, false, false, null, "手机")]
        public string F_MobilePhone { get; set; }
        [DatabaseAttribute("varchar(50)", false, false, false, null, "邮箱")]
        public string F_Email { get; set; }
        [DatabaseAttribute("varchar(50)", false, false, false, null, "微信")]
        public string F_WeChat { get; set; }
        [DatabaseAttribute("varchar(50)", false, false, false, null, "主管主键")]
        public string F_ManagerId { get; set; }
        [DatabaseAttribute("varchar(50)", false, false, false, null, "安全级别")]
        public int? F_SecurityLevel { get; set; }
        [DatabaseAttribute("text", false, false, false, null, "个性签名")]
        public string F_Signature { get; set; }
        [DatabaseAttribute("varchar(50)", false, false, false, null, "组织主键")]
        public string F_OrganizeId { get; set; }
        [DatabaseAttribute("varchar(50)", false, false, false, null, "部门主键")]
        public string F_DepartmentId { get; set; }
        [DatabaseAttribute("varchar(50)", false, false, false, null, "角色主键")]
        public string F_RoleId { get; set; }
        [DatabaseAttribute("varchar(50)", false, false, false, null, "岗位主键")]
        public string F_DutyId { get; set; }
        [DatabaseAttribute("tinyint", false, false, false, null, "是否管理员")]
        public bool? F_IsAdministrator { get; set; }
        [DatabaseAttribute("int(4)", false, false, false, null, "排序码")]
        public int? F_SortCode { get; set; }
        [DatabaseAttribute("tinyint", false, false, false, null, "删除标志")]
        public bool? F_DeleteMark { get; set; }
        [DatabaseAttribute("tinyint", false, false, false, null, "有效标志")]
        public bool? F_EnabledMark { get; set; }
        [DatabaseAttribute("varchar(500)", false, false, false, null, "描述")]
        public string F_Description { get; set; }
        [DatabaseAttribute("datetime", false, false, false, null, "创建日期")]
        public DateTime? F_CreatorTime { get; set; }
        [DatabaseAttribute("varchar(50)", false, false, false, null, "创建用户主键")]
        public string F_CreatorUserId { get; set; }
        [DatabaseAttribute("datetime", false, false, false, null, "最后修改时间")]
        public DateTime? F_LastModifyTime { get; set; }
        [DatabaseAttribute("varchar(50)", false, false, false, null, "最后修改用户")]
        public string F_LastModifyUserId { get; set; }
        [DatabaseAttribute("datetime", false, false, false, null, "删除时间")]
        public DateTime? F_DeleteTime { get; set; }
        [DatabaseAttribute("varchar(50)", false, false, false, null, "删除用户")]
        public string F_DeleteUserId { get; set; }
}

2、NFine.Mapping则是添加映射,将我们的每个Entity与它对应的表关联并指明主键

如UserEntity对应的UserMap

public class UserMap : EntityTypeConfiguration<UserEntity>
{
   public UserMap()
   {
       this.ToTable("Sys_User");
       this.HasKey(t => t.F_Id);
   }
}

Sys_User就是对应的表,而F_Id就是主键

 

3、NFine.Domain里的04 IRepository则是仓库接口的声明(上面讲NFine.Data时提到过),这些接口都会继承对应NFine.Data的IRepositoryBase接口

依旧看一下对应的IUserRepository

public interface IUserRepository : IRepositoryBase<UserEntity>
{
        void DeleteForm(string keyValue);
        void SubmitForm(UserEntity userEntity, UserLogOnEntity userLogOnEntity, string keyValue);
}

有了仓库接口声明,肯定要有对应的实现类,这样我们就可以直接使用接口里定义的方法了

4、NFine.Repository就是定义对应的实现类

我们也来看看UserRepository里面长啥样

public class UserRepository : MySqlRepositoryBase<UserEntity>, IUserRepository
{
        public void DeleteForm(string keyValue)
        {
            ...
        }
        public void SubmitForm(UserEntity userEntity, UserLogOnEntity userLogOnEntity, string keyValue)
        {
            ...
        }
}

5、NFine.Application这个就是业务逻辑层了,所有业务逻辑都是在这里编写

比如我们接下来要讲的登录功能的业务逻辑就是在这里编码实现的,我们来看看:

由于代码有点多,我就截图好了,CheckLogin这个方法就是写的登录逻辑

 

04 Web应用程序

毫无疑问这里就是视图层和控制层两者结合了

先来看看控制层,和Spring MVC的名命方式一样,叫做Controller

比如登录的控制器就是LoginController

视图层就是放在views下面了,也就是我们的一些html

 

好了,大概的结构就是这样,我们现在来讲一下它的登录功能,把整个流程跑一下,你或许可以进一步理解它的工作流程

 

第一步当然是看首页了

1、采用点击登录按钮,ajax()方法触发调用控制器

2、执行LoginController的CheckLogin()方法

3、调用业务逻辑层里的UserApp类的CheckLogin()方法,我们可以看到它声明了仓库接口的对象,并将对应实现的对象赋值。

这时就可以调用我们Data数据层的方法了

4、调用数据层的方法,通过用户名查询到对应的UserEntity,然后用账户获取了用户的日志信息Entity,验证密钥,相等的话就更新这个Entity,将用户最新登录信息日志更新,然后返回UserEntity(相当于结果bean)给我们的业务层。

5、业务层看返回的UserEntity是否为null,是的话就说明登录失败,不为null,则登录成功,然后做一些初始化操作,发一个转向信息给视图层,转到对应的页面。

 

讲了这么多,希望对刚学习NFine的你们有所帮助,有问题可以留言,我最迟会在一天内帮你们解答。

 

 

  • 11
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: nfine是一个使用C#语言的快速开发框架。它提供了一系列的工具和功能,帮助开发人员更高效地创建和管理.NET应用程序。 首先,nfine提供了一个功能强大的代码生成器,可以根据数据库表格自动生成实体类、业务逻辑层和数据访问层的代码。通过使用代码生成器,开发人员可以节省大量的时间和精力,快速地建立起应用程序的基本框架。 其次,nfine还提供了一套完善的权限管理系统。通过该系统,开发人员可以方便地对用户、角色和权限进行管理,并通过角色的配置控制不同用户的访问权限。这样做可以保证应用程序的安全性,并且对权限的管理也变得更简单高效。 此外,nfine还提供了一些常用的功能模块,如日志记录、异常处理、任务调度等。这些功能模块可以帮助开发人员更好地管理应用程序的各个方面,并提升应用程序的性能和稳定性。 最后,nfine采用了模块化的设计理念,使得开发人员可以将应用程序拆分成独立的模块进行开发。这种设计方式可以提高开发的灵活性和可维护性,使得团队合作更容易。 综上所述,nfine快速开发框架是一个功能强大、易于使用的开发工具,它能够帮助开发人员更快地开发出高质量的.NET应用程序。无论是对于个人开发者还是团队开发者来说,nfine都是一个值得尝试的选择。 ### 回答2: nfine是一款快速开发框架,它是基于.NET技术栈的 web 开发框架。该框架具有简单易用的特点,为开发者提供了一套高效快速开发工具和组件。 首先,nfine提供了一系列的代码生成工具,如代码生成器、表单设计器等,可以帮助开发快速生成基础代码和界面布局。使用这些工具,开发者只需简单配置相关参数,就能生成带有基本增删改查功能的代码,大大减少了开发时间和人力成本。 其次,nfine内置了丰富的功能模块和扩展组件,如权限管理模块、报表生成器、工作流引擎等,可以满足各种常见的业务需求。这些功能模块和组件可以快速集成到项目中,省去了开发者自行实现的繁琐过程。 此外,nfine采用了模块化开发的架构,每个模块都是独立的,可以独立部署和升级,灵活性很高。开发者可以根据需要选择性地引入和使用某个模块,无需整个框架的依赖。 最后,nfine还提供了完善的技术文档和示例代码,供开发者学习和参考。它的社区活跃度也很高,开发者可以通过社区进行交流和分享,获取帮助和支持。 总体来说,nfine是一款功能强大、易用高效的快速开发框架。它能够帮助开发快速构建稳定可靠的系统,提高开发效率,减少开发成本。无论是个人开发者还是团队,都能从nfine中获得便利和帮助。 ### 回答3: nfine快速开发框架Nfine Rapid Development Framework)是一款基于Microsoft.NET平台快速开发框架。它专注于帮助开发人员快速构建可靠、高效的企业级应用程序。 首先,nfine提供了丰富的模版和代码生成器,使开发人员能够快速生成业务代码。通过简单的配置,可以自动生成各种基础的功能模块,包括用户管理、权限管理、角色管理、部门管理等。这大大节省了开发时间,避免了重复劳动。 其次,nfine具有良好的可扩展性。开发人员可以根据实际需求,通过自定义模版和插件来扩展框架的功能。不论是添新的业务模块,还是修改现有功能,都可以通过简单的配置和代码编写来实现。 另外,nfine还支持分布式部署和云平台。它可以轻松地与其他系统进行集成,无论是在本地服务器上部署还是在云平台上运行。这为企业提供了更大的灵活性和可扩展性,能够满足各种复杂的环境要求。 此外,nfine还提供了丰富的技术支持和文档资源。开发人员可以通过在线文档和社区论坛获取帮助和解决问题。这使得开发人员能够更好地利用nfine框架进行项目开发,并能够更快地解决遇到的技术难题。 总之,nfine快速开发框架是一款功能强大、易用性高的开发工具。它能够快速生成代码、提供可扩展性、支持分布式部署,并提供全面的技术支持。无论是初学者还是经验丰富的开发人员,都能够通过nfine快速开发框架来提高开发效率、降低开发成本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值