瞎扯淡 什么是 “大型” Rails 项目

a0nqm · 2017年03月06日 · 最后由 griffinqiu 回复于 2017年09月21日 · 4622 次阅读

有听到前辈讲过一些”“大型”Rails 项目的管理方法,比如抽 Service、拆 Gem 等。 我认为项目“大小”的定义很模糊。所以多少行的项目算得上是“大型”呢?

比如我公司里的这个项目,代码统计如下:

+----------------------+-------+-------+---------+---------+-----+-------+
| Name                 | Lines |   LOC | Classes | Methods | M/C | LOC/M |
+----------------------+-------+-------+---------+---------+-----+-------+
| Controllers          |  4874 |  3808 |      68 |     336 |   4 |     9 |
| Helpers              |   331 |   168 |       0 |      20 |   0 |     6 |
| Jobs                 |    23 |    19 |       3 |       3 |   1 |     4 |
| Models               |  4355 |  2341 |      50 |     241 |   4 |     7 |
| Mailers              |     0 |     0 |       0 |       0 |   0 |     0 |
| Javascripts          |  3917 |  2717 |       0 |     343 |   0 |     5 |
| Libraries            |   714 |   515 |       7 |      55 |   7 |     7 |
| Controller tests     |   340 |   270 |       7 |      29 |   4 |     7 |
| Helper tests         |   211 |   180 |       8 |       6 |   0 |    28 |
| Model tests          |   318 |   117 |      13 |      26 |   2 |     2 |
| Mailer tests         |     0 |     0 |       0 |       0 |   0 |     0 |
| Integration tests    |     0 |     0 |       0 |       0 |   0 |     0 |
+----------------------+-------+-------+---------+---------+-----+-------+
| Total                | 15083 | 10135 |     156 |    1059 |   6 |     7 |
+----------------------+-------+-------+---------+---------+-----+-------+
  Code LOC: 9568     Test LOC: 567     Code to Test Ratio: 1:0.1

这种规模算是小型还是大型呢?

+----------------------+-------+-------+---------+---------+-----+-------+
| Name                 | Lines |   LOC | Classes | Methods | M/C | LOC/M |
+----------------------+-------+-------+---------+---------+-----+-------+
| Controllers          |  2976 |  2367 |      49 |     380 |   7 |     4 |
| Helpers              |   390 |   317 |       2 |      35 |  17 |     7 |
| Models               |  6214 |  4902 |      90 |     467 |   5 |     8 |
| Mailers              |     0 |     0 |       0 |       0 |   0 |     0 |
| Libraries            |  1873 |  1555 |      50 |     147 |   2 |     8 |
| Controller tests     |  1315 |  1031 |      24 |       3 |   0 |   341 |
| Helper tests         |     0 |     0 |       0 |       0 |   0 |     0 |
| Model tests          |  4140 |  3462 |      38 |       8 |   0 |   430 |
| Mailer tests         |     0 |     0 |       0 |       0 |   0 |     0 |
| Integration tests    |     0 |     0 |       0 |       0 |   0 |     0 |
+----------------------+-------+-------+---------+---------+-----+-------+
| Total                | 16908 | 13634 |     253 |    1040 |   4 |    11 |
+----------------------+-------+-------+---------+---------+-----+-------+
  Code LOC: 9141     Test LOC: 4493     Code to Test Ratio: 1:0.5

我们项目拆的七零八落的,这是其中一个

User.count >= 10_000_000

吧?

+----------------------+--------+--------+---------+---------+-----+-------+
| Name                 |  Lines |    LOC | Classes | Methods | M/C | LOC/M |
+----------------------+--------+--------+---------+---------+-----+-------+
| Controllers          |  14970 |  12206 |     321 |    2080 |   6 |     3 |
| Helpers              |   3017 |   2631 |       0 |     270 |   0 |     7 |
| Jobs                 |   1534 |   1256 |      63 |     122 |   1 |     8 |
| Models               |  42755 |  30393 |     495 |    3063 |   6 |     7 |
| Mailers              |    199 |    166 |      10 |      16 |   1 |     8 |
| Javascripts          |   7686 |   5926 |     182 |    1165 |   6 |     3 |
| Libraries            |  16079 |  13358 |     145 |    1151 |   7 |     9 |
| Tasks                |   3899 |   3405 |       4 |      73 |  18 |    44 |
| Controller tests     |   8885 |   7331 |     207 |     948 |   4 |     5 |
| Helper tests         |    329 |    255 |      15 |      27 |   1 |     7 |
| Model tests          |  25440 |  20199 |     317 |    1751 |   5 |     9 |
| Mailer tests         |    136 |    112 |       9 |      18 |   2 |     4 |
| Job tests            |    798 |    645 |      25 |      78 |   3 |     6 |
| Integration tests    |    205 |    155 |       2 |      17 |   8 |     7 |
+----------------------+--------+--------+---------+---------+-----+-------+
| Total                | 125932 |  98038 |    1795 |   10779 |   6 |     7 |
+----------------------+--------+--------+---------+---------+-----+-------+
  Code LOC: 69341     Test LOC: 28697     Code to Test Ratio: 1:0.4

知人的,其实 KnewOne 项目全部代码量比这个还多... 没存代码就是

对 jasl 回复

495 个 Model ...

我表示从没做过超过 50 个 Model 的项目

看了一下,有超过 50 个 Model 的,但应该在 100 以内

这个数据使用什么工具统计的?

对 huacnlee 回复

KO 也肯定超过 50 了... 知人这边是因为企业系统,模型围绕业务做的,业务多了模型数量就上去了... 不过可能那统计有水分,不少都是虚拟模型应该

接近 600 个 Model,看来我做的是大型 Rails 项目😂

对 helapu 回复
rake stats
对 jasl 回复

感觉各类业务多了,应该拆成小项目来搞,这样单独看各类业务的时候不会觉得东西好多。

想想那么多 Model,那么多业务函数,跑个 CI 得要多久啊

对 a0nqm 回复

😂 再看了下 rake 下的其他功能

对 huacnlee 回复

我的 mac mini 要半个小时多吧

+----------------------+-------+-------+---------+---------+-----+-------+
| Name                 | Lines |   LOC | Classes | Methods | M/C | LOC/M |
+----------------------+-------+-------+---------+---------+-----+-------+
| Controllers          | 23878 | 13391 |     370 |    1760 |   4 |     5 |
| Helpers              |  2381 |  1989 |       1 |     300 | 300 |     4 |
| Models               | 21610 | 14640 |     335 |    1894 |   5 |     5 |
| Mailers              |   745 |   625 |      27 |      91 |   3 |     4 |
| Javascripts          | 18787 | 14934 |      35 |    2317 |  66 |     4 |
| Libraries            |   702 |   552 |      14 |      71 |   5 |     5 |
| Controller specs     | 11811 | 10239 |       2 |      17 |   8 |   600 |
| Decorator specs      |   476 |   409 |       0 |       0 |   0 |     0 |
| Feature specs        |  1082 |   910 |       0 |       1 |   0 |   908 |
| Form specs           |  1505 |  1363 |       0 |       0 |   0 |     0 |
| Helper specs         |   156 |    63 |       0 |       0 |   0 |     0 |
| Lib specs            |    48 |    41 |       0 |       0 |   0 |     0 |
| Mailer specs         |   393 |   329 |       0 |       0 |   0 |     0 |
| Model specs          | 18993 | 13438 |       0 |      10 |   0 |  1341 |
| Policy specs         |    36 |    31 |       0 |       0 |   0 |     0 |
| Presenter specs      |   239 |   214 |       0 |       0 |   0 |     0 |
| Query specs          |   174 |   156 |       0 |       0 |   0 |     0 |
| Request specs        |   713 |   600 |       0 |       0 |   0 |     0 |
| Serializer specs     |   784 |   419 |       0 |       0 |   0 |     0 |
| Service specs        |  5376 |  4762 |       1 |      15 |  15 |   315 |
| Uploader specs       |    51 |    41 |       0 |       0 |   0 |     0 |
| Validator specs      |    75 |    64 |       1 |       1 |   1 |    62 |
| Value specs          |   268 |   225 |       0 |       0 |   0 |     0 |
| View specs           |  7107 |  6745 |       0 |       4 |   0 |  1684 |
| Worker specs         |   114 |   101 |       0 |       0 |   0 |     0 |
| Wrapper specs        |    32 |    26 |       0 |       0 |   0 |     0 |
+----------------------+-------+-------+---------+---------+-----+-------+
| Total                | 117536 | 86307 |     786 |    6481 |   8 |    11 |
+----------------------+-------+-------+---------+---------+-----+-------+
  Code LOC: 46131     Test LOC: 40176     Code to Test Ratio: 1:0.9
对 jasl 回复

说起 CI 时间的话,想起 4 年前的一个 rails 项目,CI 上跑一次完整回归大概 5 个多小时

对 rainchen 回复

凶残了...

对 rainchen 回复

好荣幸 4 年前跟大神一起做个这个大项目。

对 jasl 回复

GitLab 算不算大项目?

Model 136,许多还应该是抽象实现,表数量:63 张

不过跑 CI 也要两三个小时以上,这东西搞了 UI 测试哪套,改动起来特别费神。


Discourse - 175 Models

对 huacnlee 回复

那俩实际比模型数复杂的多吧... 最近刚好在看

对 jasl 回复

看过 Discourse,比预想的要复杂得多。

对 a0nqm 回复

Gitlab 更工整一些,Discourse 那个太乱了。。

对 huacnlee 回复

肯定算大型项目了 Gitlab 还拆了好多到子项目里去,包括 Redmine 模型的代码都不多的,模型只能算核心数据结构吧,这几个项目的 lib 目录都是大头...

对 rainchen 回复

你们 CI 用的是什么工具?

我也觉得 gitlab 叫大型项目有点反直觉,毕竟没有人管 git 或者 gerrit 叫大型软件…

对 nouse 回复

但其实 Gitlab 不算小。 不过真要说大型项目,Github 绝对算一个。

+----------------------+-------+-------+---------+---------+-----+-------+
| Name                 | Lines |   LOC | Classes | Methods | M/C | LOC/M |
+----------------------+-------+-------+---------+---------+-----+-------+
| Controllers          |  8871 |  7469 |     102 |     823 |   8 |     7 |
| Helpers              |  2309 |  1960 |       2 |     227 | 113 |     6 |
| Models               | 29324 | 23043 |     415 |    2629 |   6 |     6 |
| Libraries            | 10119 |  7971 |     175 |     928 |   5 |     6 |
| Functional tests     |   326 |   274 |       4 |      24 |   6 |     9 |
| Unit tests           |     0 |     0 |       0 |       0 |   0 |     0 |
| Controller specs     | 12005 | 10352 |       0 |      37 |   0 |   277 |
| Helper specs         |   575 |   487 |       0 |       4 |   0 |   119 |
| Integration specs    |   441 |   360 |       0 |       8 |   0 |    43 |
| Lib specs            |  5997 |  4961 |       1 |      26 |  26 |   188 |
| Mailer specs         |   685 |   621 |       0 |       0 |   0 |     0 |
| Model specs          | 45021 | 37825 |       3 |     181 |  60 |   206 |
| Presenter specs      |   290 |   240 |       0 |       0 |   0 |     0 |
| Request specs        | 20972 | 18067 |       0 |     105 |   0 |   170 |
| Routing specs        |    23 |    19 |       0 |       0 |   0 |     0 |
| Service specs        |  4590 |  3812 |      20 |      82 |   4 |    44 |
| Task specs           |   109 |    88 |       0 |       0 |   0 |     0 |
| Util specs           |    42 |    36 |       0 |       2 |   0 |    16 |
| Worker specs         |   321 |   284 |       0 |       0 |   0 |     0 |
+----------------------+-------+-------+---------+---------+-----+-------+
| Total                | 142020 | 117869 |     722 |    5076 |   7 |    21 |
+----------------------+-------+-------+---------+---------+-----+-------+
  Code LOC: 40443     Test LOC: 77426     Code to Test Ratio: 1:1.9
对 wpzero 回复

够大

对 a0nqm 回复

哈哈,刚刚没有算 rspec 的代码

对 huacnlee 回复

而且 UI 经常大改 😂

$ find . -name "*.cpp" -type f | xargs cat | wc -l
365582

😂

对 plan9 回复

.......

zchar 在 [远程] 彩程知人招募工程师 (15 - 30k) 提及了此话题。 05月31日 15:24
+----------------------+-------+-------+---------+---------+-----+-------+
| Name                 | Lines |   LOC | Classes | Methods | M/C | LOC/M |
+----------------------+-------+-------+---------+---------+-----+-------+
| Controllers          | 12577 | 10270 |     287 |    1363 |   4 |     5 |
| Helpers              |  3926 |  3323 |       0 |     499 |   0 |     4 |
| Models               | 21963 | 17862 |     263 |    2520 |   9 |     5 |
| Mailers              |   355 |   289 |       5 |      23 |   4 |    10 |
| Javascripts          | 27469 | 21880 |     158 |    4164 |  26 |     3 |
| Libraries            |  2330 |  1946 |      28 |     204 |   7 |     7 |
| Controller tests     | 24791 | 20449 |     252 |      91 |   0 |   222 |
| Helper tests         |  3404 |  2774 |      23 |       5 |   0 |   552 |
| Model tests          | 25046 | 20691 |     213 |      43 |   0 |   479 |
| Mailer tests         |   679 |   562 |       4 |       4 |   1 |   138 |
| Integration tests    |   646 |   506 |       8 |       5 |   0 |    99 |
+----------------------+-------+-------+---------+---------+-----+-------+
| Total                | 123186 | 100552 |    1241 |    8921 |   7 |     9 |
+----------------------+-------+-------+---------+---------+-----+-------+
  Code LOC: 55570     Test LOC: 44982     Code to Test Ratio: 1:0.8

需要 登录 后方可回复, 如果你还没有账号请 注册新账号