您的位置:首页 > 其它

.NET Core开发:项目实践

2016-11-06 08:21 471 查看

初始化项目

  本来想详细讲一讲dotnet core的,但我对于dotnet core的研究还不到一星期,半吊子,脑子又笨,就不写那些理论出来误人子弟了,还是直接来一篇实践给大家做个参考。废话不多说,直接上项目,这里我设计了一个简单的控制台应用程序,抓取
  http://f.apiplus.cn
的双色球信息,并持久化到SQL Server,同时还引用了Json.NET和Dapper两个外部组件。
  使用dotnet new新建项目,并入下图所示新建Common、Persistent、Service三个文件夹:
  


Common文件夹中用于存放公共组件类;

Persistent用于存放实体和实体操作类;

Service用于处理实现抓取业务并将数据通过Common将数据插入到数据库总。

  接着,我们需要引入Json.NET和Dapper两个外部组件,传统的.net项目可以通过nuget来管理,.net core项目也是如此,但是他并不会像.net项目那样把package下载到项目的根目录下,而是package下载到用户根目录下集中管理(例:C:\Users\Administrator\.nuget),不得不说,这一套和maven很像,这样的好处是管理起来方便,实现了依赖包的复用,项目看起来也更为清爽,不过如果你需要引入自己开发的项目,就需要使用dotnet pack先对项目进行打包后再做本地引入,project.json的配置如下:
{

    "version": "1.0.0-*",

    "buildOptions": {

        "debugType": "portable",

        "emitEntryPoint": true,

        "copyToOutPut": "appconfig.json"

    },

    "dependencies": {

        "Newtonsoft.Json": "9.0.1",

        "Dapper": "1.50.2",

        "System.Data.SqlClient": "4.1.0",

        "Microsoft.Extensions.Configuration": "1.0.0-rc2-final",

        "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0-rc2-final",

        "Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final",

        "System.Text.Encoding.CodePages": "4.0.1"

    },

    "frameworks": {

        "netcoreapp1.0": {

            "dependencies": {

                "Microsoft.NETCore.App": {

                    "version": "1.0.0"

                }

            },

            "imports": "dnxcore50"

        }

    },

    "runtimes": {

        "win7-x64": {},

        "osx.10.11-x64": {}

    },

    "publishOptions": {

        "include": [

            "appconfig.json"

        ]

    }

}

我们可以看到在project.json的dependencies节点中定义了项目依赖,以"Dapper": "1.50.2"为例,Dapper是我们需要引用的包的名称,1.50.2是引入的版本号,不过请务必使用 https://www.nuget.org 上的名称和版本号,并确认当前包包是否支持.net core。按照微软的官方说法是他们打算在未来启用这个project.json,不过有兴趣的同学可以访问:
  https://docs.microsoft.com/en-us/dotnet/articles/core/tools/project-json
查看有关它的详细介绍。
  


数据库设计
  创建Lotto数据库,并执行脚本如下:
USE [Lotto]

    CREATE TABLE [dbo].[UnionLotto](

    [Id] [bigint] IDENTITY(1,1) NOT NULL,

    [SN] [bigint] NOT NULL,

    [PublishDate] [datetime] NOT NULL,

    [Red1] [int] NOT NULL,

    [Red2] [int] NOT NULL,

    [Red3] [int] NOT NULL,

    [Red4] [int] NOT NULL,

    [Red5] [int] NOT NULL,

    [Red6] [int] NOT NULL,

    [Blue1] [int] NOT NULL,

 CONSTRAINT [PK_UnionLotto] PRIMARY KEY CLUSTERED 

(

    [Id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]


 编码实现

  在Common文件夹下新建QuickConfig和QuickBrowser类,QuickBrowser用于发起Http请求抓取数据,QuickConfig用于获取系统配置: 


 QuickBrowser

在QuickBrowser中,可以看到我并未使用WebRequest.GetResponse()去抓取使用,而是使用了BeginGetResponse的异步方法进行操作,因为.net core中并未发现GetResponse()方法,看来微软在重新设计.net core时,该方法被摒弃了,所以在使用.net core时还是小心为好。 


 QuickConfig

在QuickConfig中,我们可以看到配置文件的获取方式也和.net有了很大的不同,可以使用mermory、json、xml等多种方式,具体可以参考博客园大神
  http://www.cnblogs.com/artech/p/new-config-system-01.html
的文章,本例中会去加载自定义的appconfig.josn文件。
  使用VS Code新建Class真的很麻烦,namespace和class的声明均需要自己去拼写,不知道有没有人知道什么简便的方法。
  在Presistent下新建UnionLotto、UnionLottoFactory和UnionLottoDbWork类:


 UnionLotto


 UnionLottoFactory


 UnionLottoDbWork

在Servie下新建DataSpiderService和UnionLottoService类:


 DataSpiderService


 UnionLottoService

在根目录下添加appconfig.json文件:


 appconfig.json

appconfig.json中定义了项目数据库链接和api抓取地址,回顾一下project.json中的配置,我们可以发现publishOptions.include配置,因为发布时appconfig.json并不会被拷贝到发布包中,需要手动将其引入进来。

执行

  最后在Program中调用:


 Program

使用dotnet publish后,在..\bin\Debug\netcoreapp1.0\win7-x64\publish下找到JokeBuy.exe执行后,数据成功插入到数据库:
  


执行成功!
原文地址:http://www.cnblogs.com/krockey/p/5985136.html

.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: