本篇承接上篇内容,如果你不小心点击进来,建议重新从第一篇开始完整阅读。

构建NetCore应用框架之实战篇索引

一、BitAdminCore框架简介


从前篇论述我们知道,我们接下来将要去做一个管理系统的框架。

BitAdminCore框架是一个定位于后台管理系统的快速开发框架。项目源码地址:https://github.com/chenyinxin/cookiecutter-bitadmin-core

后续篇章将逐步分解整个框架的完成过程。

二、框架解决什么问题


上篇已经提出了框架需要解决的几大问题,在这里一一作答:

我们的框架面向对象是谁?

答:管理应用系统的初级或中级开发人员。

他们平时都会遇到什么共通的问题?

答:快速上线。各种技术问题。

我们的框架需要解决他们哪些问题?是否所有问题都需要解决?

答:不能解决所有问题。事实上,框架并不能解决开发人员的问题,解决的是项目的问题,不管开发框架怎么先进,开发人员每天工作时间都不会变,工作过程遇到的问题数量也不会变,变的是相同时间内能完成的功能数。框架解决的是不同项目中,开发人员遇到的相同问题,把它们形成一套解决方案,固化代码,在下个项目时,它便不再是问题。

例如:A项目需要登录功能,于是程序员用2天开发了一个登录功能,还有一堆bug。当A项目开发完成后,我们发现B项目也会用到登录功能,整一个叫框架的东西,里面只有登录功能。当B项目来的时候,我们只需要将框架代码应用进去,登录功能便已经完成。此过程可能只需要5分钟。请问,这有没有解决程序员的问题?答案是没有,项目经理也知道程序员只需要5分钟,不会给他分配2天时间。

我们的框架需要包含哪些模块?为什么需要包含这些模块?

答:上述示例已经明确说明,一个框架需要包含的模块。框架需要哪些模块,是由未来的项目决定的,也即公司的业务战略决定,而非架构师。架构师只是把它落实而已。

我们提供什么样的开发模式,可以让开发人员更快速解决问题?

答:代码可读性。重复代码不需要开发。

在实际生产中遇到的问题,架构师在理想状态下设计的要多得多,面对众多的初级开发人员,代码可读性应该作为架构的第一选项,A人员开发的代码如何在B那里快速看得懂。

所以,作者个人反对各种使用接口、调用来调用去的方式,以展示个人的技术有多高超。

我们提倡直接、暴力。让代码架构看起来像初级工程师写的直接简单。

三、BitAdminCore定位


BitAdminCore定位原理上述已经阐述。BitAdminCore起码于作者工作经历,十几年不变的管理软件开发,以前也接触使用过不同框架,各有优劣。以前net、后来使用java、再后来netcore出来之后,果断转移到netcore。

选择netcore是对比选择的结果,C#的语言优势这个不用细说,前些年,由于android以及开源趋势没有跟上,net处于下风,但时间推到2018年,随着微软战略的云化以及开源化,还有安卓进入中晚年,单从技术层面netcore对比java已经占上风,这个人使用两种语言对比后认为,但是生态仍需时日。

作为应用开发人员,省时省力才是关键,管它什么语言。所以,坚定不移选择走netcore路线,包括公司及个人影响下的团队。

BitAdminCore定位于”为个人周边团队提供管理类项目快速开发能力支撑“,同时,适应时代发展,进行开源分享。

四、BitAdminCore架构原则


个人观点,软件行业是全世界最先实现共产主义的行业。

事实上,我们每天都在免费使用别人花了很大力气和成本开发出来的软件,这在传统生产行业是不可能的事。而且免费趋势越来越火。

在这样的社会条件下,BitAdminCore框架跟随大队,一是开源,二是利用开源。目标是项目开发最优的解决方案。

五、BitAdminCore架构


基于以上提出的一些原则:可读性优先、开源、快速开发的特点。我们进一步设计我们的框架。

首先是技术选择和评判:

1、基于通用技术框架包括:html5,css3,js,Jquery3,boostrap3

解释:a、只要是个写程序的,以上技术不可能不会。b、boostrap4变动太大,个人同事都熟悉boostrap3,短期内学习成本高。

2、抛弃netcore默认的PageModel实现模式,选择静态页面+webapi模式。理由:一是太复杂需要学习成本,二是是可移植性差,三是保持所有开发模式一致。

解释:a、前端技术均需要掌握并能达到开发目的,再花成本学习一个更小众的应用没必要。b、框架如果想移植到java,包含太多net特性。c、开发web、app、weixin等客户端保持相同的开发模式,减少学习成本。

3、NetCore.All这个就不解释了,自己去看引用包结构。

4、sqlserver,理由:之前部分代码是sqlserver实现,直接迁移过去,最近也在考虑mysql版本。

解释:除非客户有特殊要求,不管语言或数据库,都是开发的人说了算,既然熟哪个就用哪个。

5、ef与sql混合。理由:长期实践结果,判断依据可读性优先。

解释:在长期的开发工作中,发现ef对于复杂的查询实现,可读性非常差,调试极度麻烦。我们把单表操作用ef,而多表操作全部使用sql实现。

6、AdminLTE后端管理界面模板。理由:随便选一个。

以上就是整个框架的底层技术选择。

本篇介绍到此,框架功能规划原则上面已经提及,下一篇继续介绍框架的功能规划选择。

构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构的更多相关文章

  1. 如何在Visual Studio 2017中使用C# 7+语法 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构 构建NetCore应用框架之实战篇系列 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架 NetCore入门篇:(十二)在IIS中部署Net Core程序

    如何在Visual Studio 2017中使用C# 7+语法   前言 之前不知看过哪位前辈的博文有点印象C# 7控制台开始支持执行异步方法,然后闲来无事,搞着,搞着没搞出来,然后就写了这篇博文,不 ...

  2. 构建NetCore应用框架之实战篇(七):BitAdminCore框架登录功能源码解读

    本篇承接上篇内容,如果你不小心点击进来,建议从第一篇开始完整阅读,文章内容继承性连贯性. 构建NetCore应用框架之实战篇系列 一.简介 1.登录功能完成后,框架的雏形已经形成,有必要进行复习. 2 ...

  3. 构建NetCore应用框架之实战篇(五):BitAdminCore框架1.0登录功能设计实现及源码

    本篇承接上篇内容,如果你不小心点击进来,建议从第一篇开始完整阅读,文章内容继承性连贯性. 构建NetCore应用框架之实战篇系列 一.设计原则 1.继承前面框架架构思维,设计以可读性作为首要目标. 2 ...

  4. 构建NetCore应用框架之实战篇(四):BitAdminCore框架1.0登录功能细化及技术选型

    本篇承接上篇内容,如果你不小心点击进来,建议从第一篇开始完整阅读,文章内容继承性连贯性. 构建NetCore应用框架之实战篇系列 一.BitAdminCore框架1.0版本 1.1.0版本是指最小版本 ...

  5. 构建NetCore应用框架之实战篇(三):BitAdminCore框架功能规划选择

    本篇承接上篇内容,如果你不小心点击进来,建议从第一篇开始完整阅读,文章内容继承性连贯性. 构建NetCore应用框架之实战篇系列 一.BitAdminCore功能规划 如何选择框架的落地功能,前篇文章 ...

  6. 构建NetCore应用框架之实战篇系列

    构建NetCore应用框架之实战篇 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构 构建Net ...

  7. 构建NetCore应用框架之实战篇(六):BitAdminCore框架架构小结

    本篇承接上篇内容,如果你不小心点击进来,建议从第一篇开始完整阅读,文章内容继承性连贯性. 构建NetCore应用框架之实战篇系列 一.小结 1.前面已经完成框架的第一个功能,本篇做个小结. 2.直接上 ...

  8. 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架

    一.系列简述 本篇起,将通过一系列文章,去描述如何构建一个应用开发框架,并以作者开发的框架为例,逐个点展开分析,如何从零开始,构建自己的开发框架. 本系列文章的目的,是带领有一编程经验的人,通过动手, ...

  9. Android网络框架Volley(实战篇)

      之前讲了ym—— Android网络框架Volley(体验篇),大家应该了解了volley的使用,接下来我们要看看如何把volley使用到实战项目里面,我们先考虑下一些问题: 从上一篇来看 mQu ...

随机推荐

  1. Dice

    Dice http://acm.hdu.edu.cn/showproblem.php?pid=5012 Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  2. python之面向对象之类变量和实例变量

    #Auther Bob #--*--conding:utf-8 --*-- #这里的变量全部都是实例变量 class Role(object): def __init__(self,name,role ...

  3. 排序矩阵中的从小到大第k个数 · Kth Smallest Number In Sorted Matrix

    [抄题]: 在一个排序矩阵中找从小到大的第 k 个整数. 排序矩阵的定义为:每一行递增,每一列也递增. [思维问题]: 不知道应该怎么加,因为不是一维单调的. [一句话思路]: 周围两个数给x或y挪一 ...

  4. 面向对象设计模式纵横谈:Builder 生成器模式(笔记记录)

    Builder模式的缘起 假设创建游戏中的一个房屋House设施,该房屋的构建由几个部分组成,且各个部分要富于变化. 如果使用最直观的设计方法,每一个房屋部分的变化,都将导致房屋构建的重新修正…… 动 ...

  5. AE教程:学会这个,你做的Logo就可以单独出道了

    一.确定所需要做的动效 1.制作logo背景形状动效 2.制作U的动效 3.制作I的动效 4.制作消失动效 二.制作logo背景形状动效1.”合成 - 新建合成“ 新建一个1000*800的合成 2. ...

  6. git保护进程

    https://github.com/Mattiwatti/PPLKiller 去掉进程保护内核级

  7. Vue2.0 keep-alive 组件的最佳实践

    1.基本用法 vue2.0提供了一个keep-alive组件用来缓存组件,避免多次加载相应的组件,减少性能消耗 <keep-alive> <component> <!-- ...

  8. Telnet 协议详解

    Telnet 协议详解 一.概述 ============================================================ Telnet 协议是 TCP/IP 协议族中 ...

  9. 如何使用webpack打包前端项目

    webpack概述 随着前端体积越来越大,功能越来越丰富,这时候就需要将前端工程化,而 webpack就是用于将前端各种文件打包起来. 一个简单的webpack应该包含以下几个概念 · 入口起点 · ...

  10. install pip(mac)

    simple method:  sudo easy_install pip you have done!and can install the other py programs using pip ...