11月2日,抽奖系统开发的第二天。
昨天做的系统设计,总还是觉得有些地方不太完善,但也说不上来有什么地方不对劲,越想越是没头绪。算了,还是不想设计的问题了,继续开发的工作吧。技术对自己的设计多少还是有些不够自信啊。
第二天的任务是把抽奖系统的项目代码搭建起来。这也是非常关键的基础性工作啊。正所谓,好的开始就是成功了一半。
以前用PHP或者Java都有成熟的框架,而且框架都会有严格的要求,或者会自动生成项目基础代码,只要按照框架要求来搭建项目就好了,再把一些公共的类库引入进来也就差不多了。
可是现在,Go语言开发,没有积累呀,一切都要重头开始。
还好免费课《iris+xorm Go语言开发球星库》有很详细的介绍,也是一个很完整的项目了。
那么,这里也是可以参考借鉴了。
首先是项目的代码目录搭建
这里就要充分的考虑到项目代码的构成,目录结构只是代码结构的一个归类整理,好的目录结构,也就可以让项目代码更加清晰明了,减少歧义。
好吧,下面就来考虑这个代码结构的问题。
配置文件,放在 /conf 目录。
公共类库代码文件,放在 /comm 目录。
数据源的封装类,放在 /datasource 目录。
数据库操作的类库,放在 /dao 目录。
数据操作的封装类,放在 /services 目录。
数据模型类,放在 /models 目录。
Web应用相关的就都放在 /web 目录。
然后,在Web应用里面,还有很多东西,所以,就可以都放在 /web 目录下面了。比如:
业务逻辑处理类 /web/controllers
公共静态资源文件 /web/public
URL路由规则设置 /web/routes
页面模板文件 /web/views
业务中间件 /web/middelware
模板上的实体对象 /web/viewmodels
业务逻辑中的一些公共代码封装 /web/utils
还有,Go程序需要有一个 func main() 主函数,这个主函数的代码也放在 /web 目录下面吧,方便部署的时候, go build main.go 生成的可执行程序,连同 /web/public 和 /web/views 这些文件,一起打包部署到线上去。
在主函数中,会要做很多关于启动的初始化相关的事情,这些事情还挺多的,单独封装提取出来,放在 /bootstrap 目录里面。
这么一整理,感觉做一个项目,也确实是不简单,还没有写一行代码,单独一个项目的代码框架,已经有这么多的目录规划出来了。
下面再整理下这些目录结构:
/bootstrap
/comm
/conf
/dao
/datasource
/models
/services
/web
/controllers
/middleware
/public
/utils
/routes
/views
上面这些目录结构应该就差不对多了,可能后面根据需求还会有些增加,比如:test 目录放测试代码,有遇到,需要了再来处理就行了。
核心代码开发
这里要准备的东西有点多啊,一天25个小时也是搞不定啊 :(
像 /comm 里面的公共类,处理时间格式化、生成签名、加密解密、字符串过滤、数据类型转化、文件路径验证、Md5、随机函数等,都是非常基础的代码。这些公共方法几乎每个项目都要用到,从0开始真是力不从心啊。
像 /datasource 里面对数据库、对redis的初始化、执行方法封装,也是需要有针对性的封装才好,原生裸的类库用起来还是有些重复代码。
上面 comm, datasource 还是很通用的核心代码,更多的是关于业务的数据处理, dao, services 这些核心代码,工作量不是一点点大啊。
技术心声
做到这里,技术感觉有些绝望了,后悔这个规划太草率,后悔当初答应做这个项目了。
但是,这个时候找产品、找运营也是帮不上忙了,找老板,也没法说半途而废啊。不是自己约的炮,被他们逼得,也一样是下不了台啊。
技术的无力感像窗外的雾霾一样,在无限蔓延中。
时间还在滴答流淌,技术手中的键盘也一直在劈啪作响。今天的夜很长,也有点冷。
老师总结
现在做技术开发的很多,但是靠谱的人依然很少。
靠谱,从开始的规划,从做事的每一天,从承诺的结果中一点一滴积累而来。
而靠谱的技术开发,学习和实践的积累非常重要,尤其是面对一个新的领域,要快速学习掌握,要站在巨人的肩膀上成长,才能有更快的速度和高度。
很多基础性的工作,哪怕是业务相关的代码,也是有很多可以参考学习的地方。在需要的时候临时去找、临时去学,其实已经慢了一步,如果能够在当前,在现在,在工作,在学习之余,有更多的尝试和探索,有更多的实践和积累,那么,新的任务、新的领域,就是新的机会,就是一个更好证明自己才是最靠谱的机会。
学习《Go抽奖系统》实战课程,不仅有实战的经历,连项目代码都免费咯。