• MOV AX,0
    2019-01-31
    公司项目模块的大致结构:
    build/
    src/
         main/
                  java/domain.parent.module/
                                                             constants/
                                                             entity/
                                                             dao/
                                                             mapper/
                                                             service/impl/
                                                             facade/impl/
                                                             job/
                                                             utils/
                  resources/
                                  META-INF/
                                                   dubbo/
                                                   spring/
                                                   app.properties
                                  log4j.properties
        /test/java/domain.parent.module/
                                                            dao/
                                                            service/
                                                            facade/
                                                            job/
                                                            utils/
                                                            TestBase.java
    deploy.properties
    jenkinsfile
    pom.xml
    不经意间已经习惯这种结构了。很多东西用的时候很顺,以致于都察觉不到它的好处。看老师的文章感觉非常亲切,也收获了很多!
    展开

    作者回复: 谢谢你分享这个典型的代码文件组织结构。

    
     4
  • Being
    2019-01-30
    doc/
          需求文档(按功能模块分子目录)、各成员的日志记录(按项目节点分子目录)、UI设计
    Source/
         VS工程下的多个项目相关Project工程目录、基础库、test工程、Tools工程 ,.sln文件一般放在该目录,主要是VS IDE的组织方式
         每个工程下就是会细分像老师说的src
    Product/
         一般还要分Debug/Release Win32/x64, 存放相应的exe生成文件以及依赖库
         主要方便发布与测试
    Versions/
         就是每个节点后发布的版本了,并记录依赖的相关部署环境等

             
    展开

    作者回复: 嗯,看起来像是代码的上一层的组织方式,不仅包括代码,还包括编译后的文件,以及支持文件。

    
     3
  • 极客不落🐒
    2019-01-31
    作为 Javaer,分享一些自己接触到东西。目前很多都有脚手架工具,可以帮你快速初始化/规划项目代码组织,比如:Java 里面的 Maven,可以帮你快速初始化一个项目(Maven 生成的工程目录划分,具体细节移步官方文档:https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html)。

    利用脚手架初始化完一个项目之后,涉及到了分层,一般会有类别(controller/web、service、dao 等)、业务模块(user、order 等)两个维度,看是先按照类别再按业务分层(如:controller/user、controller/order;service/user,service/order),还是先按照业务再按照类别分层(user/controller,user/service;order/controller,order/service),但一定不要两种风格混合。
    展开

    作者回复: 好经验,谢谢分享!

    类似于Maven的脚手架工具很有价值,我也建议大家了解了解。我个人特别喜欢它对代码依赖关系的自动化处理。第二部分,我们会使用一下这个小工具(不会讲,就是用一下)。

    
     2
  • Lindroid
    2019-04-19
    总结:
    README:命名大写字母,放在根目录下,用于介绍软件的使用;
    COPYRIGHT:命名大写字母,放在根目录下,用于解释软件的版权;
    源代码文件:src目录下,可再细分目录;
    测试代码:需要和功能代码分开存放,可放在根目录的test目录下,一个测试文件最好执行一个独立任务;
    文档:可以放在根目录的docs 或者 doc 的目录下。
    展开
    
     1
  • 老吴
    2019-02-26
    说到这个,老师能否加开一篇领域驱动的课

    作者回复: 这是一个好话题,但是我现在真的不懂领域驱动。要加油学习了!

    
     1
  • pyhhou
    2019-02-24
    自己使用的就是最简单的 MVC 的代码结构,写的是 node JS,不需要编译结构也是一些个工具帮忙生成的:
    bin/
    node_modules/
    public/
    scripts/
    src/
         controllers/
         helpers/
         models/
         routes/
    tests/
    .env
    app.js
    package.json
    package-lock.json

    这里比较不好的是 tests 很难和 src 里面的东西一一对应,有时写着写着会把自己绕进去,不知老师有没有什么好的建议。还想请问老师的就是即便是在一个好的文件框架下,很多子文件的层级结构也还是得由我们程序员自己来设定,就比如一个功能可以由一个文件实现,也可以由多个文件协同实现,这里面有没有一些个比较好的实践,或者是可以借鉴的思想方法,使得即便是不看半句代码,光看文件名加文件结构就可以把设计思想以及代码功能看出个十之八九?
    展开

    作者回复: 对应好源代码和测试案例,是一个省时省力的思路。JDK一般按照源代码的目录结构组织测试。比如,测试接口规范javax.net.ssl.SSLSocket的代码,放在test/jdk/javax/net/ssl/SSLSocket目录下。测试接口实现sun.security.ssl.SSLSocketImpl的代码,放在test/jdk/sun/security/ssl/SSLSocketImpl目录下。我们经常需要翻找测试用例,来检查测试覆盖是不是足够,这种对应的组织方式的确省了不少时间。

    文件的安排,首先要做好模块的划分,功能类似的、目标类似的放到一个命名空间里(比如Java的包);然后,分割接口规范和内部实现;接口规范和内部实现放到不同的命名空间里;然后,再划分依赖关系,公开接口的文件,一个类一个文件;内部实现的代码,尽量减少文件间的依赖关系,只被一个类依赖的代码,都放到那个类里去。

    比如,javax.net.ssl是TLS协议的公开接口规范,单独使用一个公开的包。sun.security.ssl是TLS接口规范的一个实现,单独使用另外一个包。sun.security.ssl.ClientHello类里,还包含了支撑这个类实现的其他几个内部类。

    package sun.security.ssl;
    final class ClientHello {
        static final class ClientHelloMessage extends HandshakeMessage {
            // snipped
        }

        private static final
                class ClientHelloKickstartProducer implements SSLProducer {
            // snipped
        }
        // snipped
    }

    另外,就是做好命名空间和类的命名,名字清晰了,从文件名和文件结构的确可以看到更多的东西。

    
     1
  • 苦行僧
    2019-02-07
    一般使用maven的工程结构
    
     1
  • 不知
    2019-01-30
    上文图中那个make/是什么含义

    作者回复: 放置makefile的目录

    
     1
  • Sisyphus235
    2019-05-22
    软件组织都应该有背后逻辑,知道软件功能能更好的看源码,如果能跑起来在使用中了解速度更快,阅读源码能逐步了解代码实现原理,测例能进一步帮助开发者了解软件的边界
    
    
  • 彩色的沙漠
    2019-05-07
    请问老师,我经常看到的github项目还是自己的项目都是把软件是干什么的和怎么使用放到了README文件,没有区分放到README和软件文档doc两个文件维护。

    作者回复: 一些小的项目,README就能够承担这些责任了。

    
    
  • 小文
    2019-02-18
    很多网上的代码都没有版权说明,那也会受法律保护吗?

    作者回复: 是的。这种代码的版权风险很大的,不知期限,不知版权归属,不知许可方式。有些法律默认没有版权说明,就是作者保留所有权利。

    
    
我们在线,来聊聊吧