手记

『项目结构与框架:Go』

gopher-1.png

gopher-one.png

大家好,我叫谢伟,是一名程序员。

今天和大家谈谈项目的组织结构。在这之前的文章,我给大家推荐了一个适合爬虫的项目组织结构:

workspace
    download
        download.go
    engine
        engine.go
        objects.go
    infra
        utils.go
    main
        main.go
    parse
        github
            github_trending_parse.go

整个项目设计成下面几块:

  • download : 下载器,获取网页源代码

  • engine: 调度层, 进行爬虫任务调度、抓取信息的定义

  • infra: 基础设施层,项目辅助功能

  • main: 主函数入口

  • parse:解析层,进行网页信息解析

这样把逻辑顺序理顺了,写代码的逻辑顺序也理顺了。知道什么地方做什么。之所以对项目进行良好的组织,一方面是便于理清逻辑顺序,一方面是便于项目的可扩展性,低耦合性。

什么意思呢。

打个比方,你现在的解析层是解析的是github 网站的源代码,如果将数据和业务等混杂在一起,以后可能你换一个网站抓取,代码就需要改动。这样的强耦合性失去了代码的可扩展,完全不适合扩展。

好,上面的例子是我借鉴之后形成的专门给爬虫定下的框架。

这个例子可能没有说服力。

再举个例子:beego 是著名的 HTTP 框架。

整体设计架构分为八大独立的模块构成,高度解耦。

  • cache: 缓存逻辑

  • config:解析配置文件

  • context:上下文层

  • httplibs: 网络模块

  • logs: 日志模块

  • orm: 数据库orm 模块

  • session: 持久化模块

  • toolbox: 工具模块

architecture.png

└─beego
    ├─.github
    ├─cache
    │  ├─memcache
    │  ├─redis
    │  └─ssdb
    ├─config
    │  ├─env
    │  ├─xml
    │  └─yaml
    ├─context
    │  └─param
    ├─grace
    ├─httplib
    ├─logs
    │  ├─alils
    │  └─es
    ├─migration
    ├─orm
    ├─plugins
    │  ├─apiauth
    │  ├─auth
    │  ├─authz
    │  └─cors
    ├─session
    │  ├─couchbase
    │  ├─ledis
    │  ├─memcache
    │  ├─mysql
    │  ├─postgres
    │  ├─redis
    │  └─ssdb
    ├─swagger
    ├─testing
    ├─toolbox
    ├─utils
    │  ├─captcha
    │  ├─pagination
    │  └─testdata
    └─validation

这些独立的模块最后反应在项目组织上就是一个个相互独立的文件夹,各个文件夹下完成相应的任务。

所以,我们需要打造属于自己的项目框架(项目组织结构)。当然需要按场景来,比如,这是一个 web 项目,你还傻乎乎的按照上文提的爬虫的项目组织进行组织代码。

相信你是孤独的

我司技术教练正在推进领域驱动设计(Domain-Driven-Design  DDD),强调将分析模型和领域模型当做一个不可分割的实体进行代码梳理和设计。

先讲述下领域驱动设计的层结构:

  • User Interface : 负责向用户展现信息,并且会解析用户行为,即常说的展现层。

  • Application Layer: 应用层没有任何的业务逻辑代码,它很简单,它主要为程序提供任务处理。

  • Domain Layer:这一层包含有关领域的信息,是业务的核心,领域模型的状态都直接或间接(持久化至数据库)存储在这一层。

  • Infrastructure Layer:为其他层提供底层依赖操作

我认识不是太深刻。

在此还是分享下提供restful api 服务的项目组织结构,希望对大家有帮助,而且这个项目结构会是我今后主推的代码框架。直到能够熟练的使用。

workspace
    app
    domain
    infra
    main
    scheduler
          scheduler.go
    ui
       api-server
           api_server.go
           router_function.go
       parse
           parse

所以:

    ui
       api-server
           api_server.go
           router_function.go
       parse
           parse

不难发现,对于一个 restful api 服务,UI 层便是 http 的那些东西、和用户解析数据的那些东西

app

app 层是应用层:比如说 restful api 需要操作的是一个学生管理系统,那么App 便是和 学生、学校有关的一些应用

domain

domain 层:领域层,学生管理系统,那么领域表示学生、学校、知识、课本等这些属于该一领域的知识集;PaaS 系统,那么领域表示组件、安装部署、场景等属于该一领域的知识集

infra

infra 基础设施层:为其他层提供服务,比如字符串操作、比如排序操作、比如数据清洗操作等

scheduler

scheduler 调度层,UI 层API 和 APP 实体存在一些调度关系,都交于scheduler 层进行操作。

main

主函数入口,启动 restful api 服务等。

以上就是我想本节分享的关于项目结构和组织的两个框架:1. 一个适用于爬虫 2. 一个适用restful api 服务

再会,我是谢伟。



作者:谢小路
链接:https://www.jianshu.com/p/403bef16f233

0人推荐
随时随地看视频
慕课网APP