对不属于类的实用程序函数进行分组的最佳方法是什么?在Ruby中,我会将它们分组在一个模块中.我应该在Scala中使用特征来获得相同的效果还是对象?
我知道"我应该如何缩进代码"的一般答案通常是"按照您的意愿行事,但与团队中的每个人一样",但在上一次我看到很多项目和平台都依赖于2空间缩进.
我只是想确保在缩进时获得"最好的帮助",并确保它具有前瞻性.考虑到兼容性等,稍后在项目中更改结构是一个相当大的问题.
现在大多数项目依赖于2个Spaces,4个Spaces或Tabs.
问题是"社区"在哪里?2个空格还是4个空格?
我的猜测是2个空间,因为它表现在大公司和所有标准推动项目都在使用它.
您如何看待当前和未来的情况?适应2 Spaces缩进是否明智?
我有一个经常使用许多语言功能的Haskell项目,我希望每个源文件的语言扩展块都是相同的.这是一个清单,
{-# LANGUAGE Arrows,
BangPatterns,
DefaultSignatures,
DeriveDataTypeable,
DeriveFunctor,
EmptyDataDecls,
FlexibleContexts,
FlexibleInstances,
FunctionalDependencies,
GADTs,
GeneralizedNewtypeDeriving,
MultiParamTypeClasses,
NamedFieldPuns,
NoImplicitPrelude,
NoMonomorphismRestriction,
OverlappingInstances,
RankNTypes,
RebindableSyntax,
ScopedTypeVariables,
StandaloneDeriving,
TemplateHaskell,
TypeFamilies,
TypeOperators,
TypeSynonymInstances,
UndecidableInstances,
ViewPatterns #-}
Run Code Online (Sandbox Code Playgroud)
也许对某些人来说这是不好的做法,但我认为语言扩展是我经常编写代码的"Haskell +"的一部分.而且,我希望它在模块之间是相同的.例如,NoImplicitPrelude语言显着改变,我希望所有模块都统一.
问题:如何在不将语言块复制粘贴到每个文件中的情况下如何实现此目的?我经常学习新的语言功能,将其添加到模块A,然后开始处理模块B,并意识到我必须从模块中复制语言块,这很烦人A.
仅仅是CPP因为一个没有做到这#include一点的pragma !提前致谢.
我目前组织单元测试的方法归结为以下几点:
BusinessLayer,有一个BusinessLayer.UnitTests测试项目.CustomerRepository命名空间下BusinessLayer.Repositories,有一个测试类CustomerRepositoryTests的命名空间BusinessLayerUnitTests.Repositories.每个测试类中的方法遵循简单的命名约定MethodName_Condition_ExpectedOutcome.因此,类CustomerRepositoryTests包含一类测试CustomerRepository与Get定义方法如下所示:
[TestFixture]
public class CustomerRepositoryTests
{
[Test]
public void Get_WhenX_ThenRecordIsReturned()
{
// ...
}
[Test]
public void Get_WhenY_ThenExceptionIsThrown()
{
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法对我很有用,因为它使得对某些代码的定位测试非常简单.在相反的网站上,它使代码重构变得非常困难,应该是:
有没有组织单元测试仍然让我找到测试特定的代码迅速的一些巧妙的方式,并在同一时间更借本身对重构?
或者,是否有一些,呃,也许是Visual Studio扩展,这将允许我以某种方式说"嘿,这些测试是针对该方法的,所以当方法的名称发生变化时,请非常友好并改变测试" ?说实话,我正在认真考虑写自己的东西:)
我是自学编程的人,并且没有接受任何正式的.NET编程培训.
前段时间,我开始使用C#来开发一个GUI程序来控制传感器,项目已经蓬勃发展.我只是想知道如何在我的表单中最好地组织代码,特别是UI代码.
我的表格目前是一团糟,或者至少对我来说是一团糟.
我的问题是这看起来像一团糟,特别是国家财产,并且变得无法维护.此外,我的应用程序逻辑代码和UI代码在同一个文件中,在某种程度上,混合似乎是错误的,这意味着我需要做很多滚动才能找到我需要的东西.
你如何构建.net表单?
谢谢
我喜欢组织我的代码,所以理想情况下我想要每个文件一个类,或者当我有非成员函数时,每个文件需要一个函数.
原因是:
当我阅读代码时,我将始终知道在哪个文件中我应该找到某个函数或类.
如果它是每个头文件的一个类或一个非成员函数,那么当我include成为头文件时,我不会包含整个混乱
.
如果我在函数中做了一些小改动,那么只需要重新编译该函数.
但是,将所有内容拆分为许多标头和许多实现文件都会使编译速度变慢.在我的项目中,大多数函数访问一定数量的模板化其他库函数.因此代码将反复编译,每个实现文件一次.编译我的整个项目目前在一台机器上需要45分钟左右.大约有50个目标文件,每个目标文件使用相同的昂贵编译头.
也许,每个头文件有一个类(或非成员函数)是可接受的,但是将许多或所有这些函数的实现放在一个实现文件中,如下例所示?
// foo.h
void foo(int n);
// bar.h
void bar(double d);
// foobar.cpp
#include <vector>
void foo(int n) { std::vector<int> v; ... }
void bar(double d) { std::vector<int> w; ... }
Run Code Online (Sandbox Code Playgroud)
同样,优点是我可以只包含foo函数或只包含bar函数,整个项目的编译速度会更快,因为foobar.cpp是一个文件,所以std::vector<int>(这只是其他一些昂贵的例子)编译模板化构造)必须只编译一次,而不是两次编译a foo.cpp和bar.cpp单独编译.当然,我上面的原因(3)对于这种情况是无效的:刚刚改变foo(){...}之后我必须重新编译整个可能很大的文件foobar.cpp.
我很好奇你的意见是什么!
c++ build-process file-organization compilation code-organization
我即将在GPL下上传一个我一直在使用Sourceforge的项目,并希望得到一些关于如何以易于理解和使用的方式组织代码的建议.它,适用于git,以及Sourceforge呈现的方式.
我的项目是一个跨平台的C++应用程序,包括以下内容:
组织这个的最好方法是什么?
在我自己工作的时候,从项目根目录开始我就像这样:
/ LibPortion
/ GuiPortion
/ libs /开源库
/ libs /修改的开源库
/ libs/compiled /来保存已编译的库,包括编译Windows时的一些这不是来自开源库,例如Cygwin库文件
这是组织事物的明智方式吗?这符合惯例和期望吗?
在检查我的项目时,检查开源库以及项目的一部分是否有意义?我认为这样做是有意义的,因为这可以最大限度地减少摩擦,使项目设置并运行新的开发.当然我至少应该检查修改后的开源库.
另外,在编译库下包含在存储库中有什么意义?我认为最好告诉git忽略该目录并将其留空,因为它的内容在每个构建目标上都会有所不同,因为我的项目是跨平台的.
然而,对于那些不想为构建和/或下载所有库本身来提供为主要平台预编译的库而烦恼的人来说,这似乎也很不错.分享这些最聪明的方法是什么?我正在寻找Sourceforge,对我来说,如果不是作为我的git存储库的一部分,我应该如何分享这些内容并不是很明显.
考虑一个实现大量接口的类,使用partial class定义在单独的文件中实现每个接口是否有意义?
这是滥用语言功能还是我不知道的成语?
我正在写一个表示某些Web API的Python库。现在,我的库目录看起来与此相似:
__init__.pyAccount.pyOrder.pyCategory.pyrequests.py在中__init__.py,我有类似以下内容:
from .Account import Account
from .Order import Order
from .Category import Category
from . import requests
Run Code Online (Sandbox Code Playgroud)
这允许先使用import cool_site然后再cool_site.Account(…)进行诸如此类的操作,但是存在以下问题:当我在IDLE中处理代码时,该对象随后被称为cool_site.Account.Account,这感觉很不好。
接下来我感到不满意的是我的代码组织。现在,我的Account班级接受初始化凭证,创建一个requests.Session对象,然后处理与服务器的所有通信,即搜索订单等。Account然后,此类实例将自身传递给所有其他实例,例如传递给Order-,因此订单的实例将具有.account保存Account创建它的实例的属性。当另一个类实例本身必须执行某项操作时(例如,更改订单的注释)(通过调用o.comment = 'new comment',由类中的@comment.setter装饰器进行更改Order),它将其转发给一个Account对象,该对象在初始化时传递给该对象,然后使用example self.account.set_order_comment(new_comment)。然后,此方法将使用所有Web请求来实现该目标。
我想问的最后一件事是如何以及在哪里保留低级请求模板。现在我在cool_site.requests子模块中有它,针对不同的请求有不同的功能,例如SetOrderComment上述情况(这是一个功能,因此应该小写,但是在这种情况下,我认为它在某种程度上类似于类-是可以吗?)。该Account.set_order_comment会使用这样的:
r = cool_site.requests.SetOrderComment(order.id, new_comment)
response = self._session.request(**r)
Run Code Online (Sandbox Code Playgroud)
因为此函数会返回一个带有参数的字典,以Session.request从requests库中获取函数。身份验证标头已在类实例的_session …
.net ×2
c# ×2
c++ ×2
api-design ×1
compilation ×1
ghc ×1
haskell ×1
indentation ×1
interface ×1
nunit ×1
php ×1
python ×1
readability ×1
scala ×1
sourceforge ×1
tdd ×1
unit-testing ×1
usability ×1
winforms ×1