.NET跨平台之mac 下vs code 多层架构编程
Q Q:408365330 E-Mail:egojit@qq.com
概述:
为了研究跨平台.NET 开发,我打算利用.NET core 编写一个跨平台的cms,这个CMS我也秉着开源的原则放到github上面,为.NET 开源社区做点小小的贡献吧。如果有兴趣的可以联系我一起为.NET开源和跨平台做点小小的贡献吧。EgojitCMS传送门 github地址:https://github.com/egojit8/EgojitCMS.git
技术架构和设计选型 ASP.NET MVC core+EntityFramework core+mysql/sqlite
连接mysql 数据库和嵌入式的Sqlite 这2个数据库支撑cms完全的足够并且都是开源跨平台。机构使用最初接触.NET开发是时候的经典三层架构,只不过这里面没有了SqlHelper类了,这个架构作为开发cms的架构完全适合,我们只是开发一个简单的CMS无需把框架整的太过复杂,神马领域驱动模式(DDD)开发,命令职责查询分离模式(CQRS)开发在这里就不用了(我也用不好,哈哈……)我一直都认为最适合项目的框架才是最好的框架,一堆技术人员总是为了追求封装而封装把简单的项目搞的太过复杂,没必要,累死自己还累死团队人员并且也增加了项目的出问题概率。
数据库操作通过EF 这个超级好用的ORM框架,类比如java web开发中的hibernate 或者 mybatis,只不过EF更加智能。为什么选择EF?因为它让我们很好的去操作数据库,并且通过设置不同的Provider可以实现多数据库的操作,切换数据库so easy!而且这个CMS是新开发,所有没有现成的数据库,那么用EF进行Code First开发,让开发人员更多的关注面向对象的类设计,而无需和二维关系表做斗争(让这个工作成为专业的DBA的工作吧)。
mac 下vs code 多层架构编程:
很多人初步接触.NET core脱离了visual studio这个宇宙最强IDE后不知道怎么去组织自己的项目了,因为这里我们是经典三层机构编程,但是这里我们使用开源跨平台的vs code没有vs那么无敌智能,一切回归到最原始和最本质状态,我们必须得了解怎样组织我们的项目结构和编译脚步的调整。
.NET core使用文件目录形式管理项目,它更加的简单明了更加还原本质;我们的项目根目录是EgojitCMS,所以我们要在我们的项目中新建目录为了适应VS我们适当的调整目录。在EgojitCMS目录新建一个src目录作为源码目录,然后就是大家所了解的BLL,DLL,Comm,Models,Web如图:

大家好奇不是三层么,三代指多,哈哈……,如果要较真就是多层架构。Web顾名思义就是web层,里面就是mvc相关的代码和结构,其它都是库文件层。就不每一层一一介绍了,为什么建这些层就不说了,只拿Models层来说事。新建project.json这个是层的配置文件,可以简单的理解成java web开发中的maven 配置文件,它管理引用库和一些工具配置,如下:
{
  "version": "1.0.0-*",
  "dependencies": {
    "Microsoft.EntityFrameworkCore": "1.0.0",
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
    "Pomelo.EntityFrameworkCore.MySql": "1.0.0"
  },
  "tools": {
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
    "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
  },
  "frameworks": {
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0-*"
        }
      }
      //"imports": "dnxcore50"
    }
  }
}
很多东西可以到官网说明文档去学习比我说要好进入官网传送门
配置好后可以加入相关类文件

这个库算是建好了,那怎么被Web层或者其它层应用呢?需要在web层中的project.json中配置

然后通过 dotnet restore重置获取相关库。这样web层就可以使用Models层的类了。MVC模板项目通过yo aspnet 命令去新建,前一篇文章已经说了。记得一定要进入Web层去执行yo aspnet把mvc模板结构建到Web中去。请查看下面gif动画可以看到有智能提示并且显示User:

然后基本框架搭建完成。最终的机构如下图:
但是这个时候如果直接F5运行会报错的。因为自动生成的launch.json中配置的路径不正确,需要手动修改根据你的项目根目录下面的机构进行修改配置:

同时对tasks.json进行修改:

这样就可以直接F5进行断点调试和运行
最后:
以上都是对EgojitCMS的铺垫,时间仓促.希望.NET 开源和跨平台越走越远。
.NET跨平台之mac 下vs code 多层架构编程的更多相关文章
- EF 下的code fist 模式编程
		
EF 分两种模式 codefirst(就是不知道数据是啥,也没有数据库) 和 database fist (数据已经设计好了) 首先打开vs 新建一个项目 创建一个控制台程序 然后 新建一个Tea ...
 - 推荐个Mac OSX下的Code Editor:Atom
		
首先只是当Editor用,不是整成IDE级. 先说几个大家耳熟能详的: 1.Sublime,Sublime在Mac下的安装并不完全,CLI启动需要自己ln个链接.还有一些其他原因,比如Packages ...
 - 在Mac下运行ASP.NET Core应用程序
		
在Mac下运行ASP.NET Core应用程序 通过参照.NET Core相关官方文档,在我的Mac电脑上用Visual Studio Code创建了我的第一个ASP.NET应用. 开发环境搭建 首先 ...
 - Mac下运行ASP.NET Core应用程序
		
Mac下运行ASP.NET Core应用程序 在Mac下运行ASP.NET Core应用程序 通过参照.NET Core相关官方文档,在我的Mac电脑上用Visual Studio Code创建了我的 ...
 - mac下Fiddler的安装-启动
		
使用教程参考:http://www.cnblogs.com/TankXiao/archive/2012/02/06/2337728.html#request 环境安装 Mono安装 首先,Mac下需要 ...
 - mac 下安装mongodb
		
转载自https://segmentfault.com/a/1190000002547229 概念 MongoDB 是一个跨平台的,面向文档的数据库,提供高性能,高可用性和可扩展性方便. MongoD ...
 - appium mac 下 安装及踩坑
		
Appium Appium是一个开源.跨平台的测试框架,可以用来测试原生及混合的移动端应用.Appium支持IOS.Android及FirefoxOS平台.Appium使用WebDriver的json ...
 - Mac下也能用抓包工具Fiddler
		
一直以来都是在Windows底下工作,对于抓包工具,自然而然当属Fiddler最最出色.不过Fiddler是在.Net runtime环境下运行的,所以想要在Mac下使用,有些困难. 在试过了Char ...
 - 2016年最新mac下vscode配置golang开发环境支持debug
		
网上目前还找不到完整的mac下golang环境配置支持,本人配置成功,现在整理分享出来. mac最好装下xcode,好像有依赖关系安装Homebrew打开终端窗口, 粘贴脚本执行/usr/bin/ru ...
 
随机推荐
- GDB的深入研究
			
GDB的深入研究 一.GDB代码调试 (一)GDB调试实例 在终端中编译一个示例C语言小程序,保存为文件 gdblianxi.c 中,用GCC编译. 在上面的命令行中,使用-o参数指定了编译生成的可执 ...
 - centos6.x开机卡死
			
问题描述: centos6.x开机卡死在进度条处 远程登录,查看系统日志,看看卡在哪儿 通过远程连接,tail -fn 20 /var/log/messages 发现报错: init: prefdm ...
 - c++的多线程和多进程
			
一.多进程和多线程对比 多进程:进程不止一个,开销比较大,通信方式比较复杂(可以用过管道.文件.消息队列进行通信),维护成本不高. 多线程:利用共享内存的方式进行指令的执行,开销比较低,但是维护起来比 ...
 - TensorFlow白皮书
			
TensorFlow [1] is an interface for expressing machine learning algorithms, and an implementation for ...
 - TortoiseSVN客户端重新设置用户名和密码
			
TortoiseSVN客户端重新设置用户名和密码 在第一次使用TortoiseSVN从服务器CheckOut的时候,会要求输入用户名和密码,这时输入框下面有个选项是保存认证信息,如果选了这个选项,那么 ...
 - ImageLoader图片加载
			
http://blog.csdn.net/liu1164316159/article/details/38728259 转载请注明http://write.blog.csdn.net/po ...
 - QT笔记之解决QT5.2.0和VS2012中文乱码 以及在Qt Creator中文报错
			
转载:http://bbs.csdn.net/topics/390750169 VS2012 中文乱码 1.方法一: 包含头文件 #include <QTextCodec> ....... ...
 - JavaScript中数组迭代方法(jquery)
			
var arr = [1,2,4,5,6]; //1.forEach(让数组中的每一项做一件事)arr.forEach(function(item,index){ console.log(ite ...
 - web前端之HTML的大框架(body元素与frameset元素)
			
web前端之HTML的大框架 body元素与frameset元素 对于从事html的人员来说,我们一般熟悉的框架是先声明html ,然后在<html>标签对里包着<head ...
 - js巧用apply方法实现数组最值以及合并
			
尽管js的apply方法在平常的使用中并不多见,但是在某些地方使用的还是很有帮助性的,这里就和大家说两个比较实用的例子:1.数组最大最小值 求数组中的最大最小值,js有相应的方法:Math.min() ...