高度嵌入(有限代码和ram大小)项目为代码组织带来了独特的挑战.
我见过很多没有组织的项目.(主要是硬件工程师,根据我的经验,他们通常不关心代码的非功能方面.)
但是,我一直在尝试相应地组织我的代码:
对于每个模块,我尝试将目的保持为这三种类型之一.
由于嵌入式项目的规模有限以及对性能的重视,通常会保留这个组织.
在某些情况下,我目前的项目是MSP430上的有限DSP应用程序,具有8k闪存和256字节RAM.
在使用循环时,我经常最终写两次代码.例如,在浏览Udacity计算机科学课程时,我编写了代码(用于查找最顺序重复元素的函数):
def longest_repetition(l):
if not l:
return None
most_reps = count = 0
longest = prv = None
for i in l:
if i == prv:
count += 1
else:
if count > most_reps:
longest = prv
most_reps = count
count = 1
prv = i
if count > most_reps:
longest = prv
return longest
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果计数大于先前重复的元素,我会检查两次.当当前元素与上一个元素不同以及当我到达列表末尾时,都会发生这种情况.
在按字符解析字符串时,我也遇到过这种情况.还有几次代码大约有5行代码.这是常见的,还是我思考/编码的结果.我该怎么办?
编辑:同样,在一个人为的字符串拆分示例中:
def split_by(string, delimeter):
rtn = []
tmp = ''
for i in string:
if i == delimeter:
if tmp != '':
rtn.append(tmp) …Run Code Online (Sandbox Code Playgroud) 在C#中,关于要创建什么类型,应该拥有哪些成员以及应该拥有哪些名称空间的问题是OO设计的问题.它们不是我在这里感兴趣的问题.
相反,我想问一下如何将这些存储在磁盘工件中.以下是一些示例规则:
将所有程序集的类型放在单个源文件中.一位做过此事的朋友说"文件是一个僵尸代码组织工具;今天我使用classview和Collapse to Definitions来浏览我的代码".
将所有代码放在一个程序集中.使部署和版本控制更简单.
目录结构反映命名空间结构
每个命名空间都有自己的程序集
每种类型都有自己的组装.(列为一个极端的例子.)
每种类型都有自己的源文件.
每个成员都有自己的文件; 每种类型都有自己的目录.(列为一个极端的例子.)
您会建议哪些工具或方法让"一人团队"保持井井有条?
我正在进行涉及大量编码的研究,编写数百个丢弃的perl脚本,使用的C++二进制文件,直到找到更好的方法,大量数据以不同的方式进行预处理,其中一些新的预处理使得古老的方式已经过时 - 直到我发现旧的方式实际上更好,等等.我的工作本身就是一个不断变化的目标,因为我必须尝试很多东西,而且往往都不是完美的.
这不是一个完全混乱的情况,但它也远非完美.在这种情况下,您会推荐一般方法吗?我确实使用SVN我的代码,虽然不是因为它太大而不适用于不同版本的数据.跟踪所有脚本和二进制文件很难,所以我总是评论它们,写下我如何运行它们等等.但是我很好奇你是否还有其他一些想法.
(我在linux系统上工作.)
version-control project-management code-organization project-organization
我和我们公司的teamlead\architect就此主题进行了讨论.
他认为,如果"通过逻辑连接的实体"放在一个cs文件中,那么理解大型项目会更容易.
我引用:
"逻辑和接口以及类的整个结构可以在一个地方看到,这是一个不能反驳的论据.要看到相同的东西但是有一堆文件你需要使用工具,类图,R#用于导航等."
"根据糟糕的理论,我可能会尖叫一大堆分离文件很酷,但是当谈到改变现有代码时,特别是如果你不是这个代码的作者,那么很难理解大量分散的文件.所以在论坛上,你可以写出"一个枚举文件",但实际上这种方法绝对不能用"
"......至于开发人员之间的代码库分离,现在同时编辑同一个文件不是问题.合并不是问题."
我多次听说过,我们必须为每个枚举,类等创建一个.cs文件,这是最好的做法.
但我无法说服他.他说他不相信任何知名程序员,如Jon Skeet.顺便说一句,这里是Skeet对这个主题的看法哪里是定位枚举类型的最佳位置?
你怎么看?有真正的问题吗?或者这是一个品味的问题,应该由组织的编码标准来规范?
着名的Angular App Structure最佳实践建议博客文章概述了新推荐的angularjs项目结构,该结构现在面向组件,而不是面向功能,或者在最初的github问题中命名- "按功能组织".
博客文章建议每个模块中的每个文件都应该以模块名称开头,例如:
userlogin/
userlogin.js
userlogin.css
userlogin.html
userlogin-directive.js
userlogin-directive_test.js
userlogin-service.js
userlogin-service_test.js
Run Code Online (Sandbox Code Playgroud)
问题是:在模块中的每个文件名中重复模块名称的优点和缺点是什么,而不是命名功能的文件?例如:
userlogin/
userlogin.js
userlogin.css
userlogin.html
controllers.js
directives.js
services.js
Run Code Online (Sandbox Code Playgroud)
我问的原因是我来自一个Django与项目和应用有一些类似想法的世界.每个应用程序通常都有它自己的models.py,views.py,urls.py,tests.py.脚本名称中没有重复的应用程序名称.
我希望我没有跨越基于意见的路线,并且有正当理由遵循这种方法.
javascript code-organization naming-conventions project-structure angularjs
我已经学习了JavaScript并且知道如何编写OO JavaScript,我可以完成自动完成,使用JavaScript的照片库这些任务,但我只是不知道如何组织代码.例如,何时何地定义函数,如何组织这些变量等等.
所以我正在寻找一些好的和简单的JavaScript项目示例来学习这些好的实践.你能建议吗?(例如列表数据过滤器).
在Java中,通常您将创建两个源文件夹src并test具有相同的包层次结构.
在Ruby中,您是否只将所有测试放在与测试类相同的文件夹中?或者您是否在单独的文件夹中创建类似的层次结构?如果是这样,您如何管理require单元测试中的路径?
在单个项目中使用多个source(.cpp)和header(.h)文件有什么好处?
这只是一个优惠的事情还是有真正的好处?
对不属于类的实用程序函数进行分组的最佳方法是什么?在Ruby中,我会将它们分组在一个模块中.我应该在Scala中使用特征来获得相同的效果还是对象?