我们的代码很糟糕.实际上,让我澄清一下.我们的旧代码很糟糕.它很难调试,并且充满了很少人理解甚至记住的抽象概念.就在昨天,我花了一个小时在一个我工作了一年多的地方进行调试,发现自己在想,"哇,这真的很痛苦." 这不是任何人的错 - 我确信这一切最初都是完全合理的.最糟糕的部分通常是它只是工作...如果你不要求它做任何超出其舒适区域的事情.
我们的新代码非常好.我想我们在那里做了很多好事.它清晰,一致,(希望)可维护.我们有一台运行用于持续集成的Hudson服务器,我们已经开始使用单元测试套件了.问题是我们的管理层专注于编写新代码.没有时间给Old Code(甚至旧的新代码)提供它迫切需要的TLC.在任何特定时刻,我们的scrum积压(针对六个开发人员)有大约140个项目和大约十几个缺陷.这些数字并没有太大变化.我们正在以尽可能快的速度添加东西.
那么我该怎么做才能避免马德里调试会话在Old Code的深处陷入困境呢?每个sprint都充满了新的发展和showstopper缺陷.特别...
一直坚持使用SQL2000太长时间了,我并没有真正接触过Common Table Expressions.
我在这里给出的答案(#4025380)和这里(#4018793)已经违背了流程,因为他们没有使用CTE.
我很感激,对于递归它们是beez kneez,并且有一些查询可以通过它们的使用大大简化,但在什么时候它们的使用只是轻浮?与子查询或联接相比,它们是否具有很好的性能优势?他们真的简化了代码并使其更易于维护吗?
简而言之,何时使用CTE而不是'较小'语法是一种好习惯.
sql-server maintainability performance common-table-expression
我已经写了几年Perl了,它是我文本处理的首选语言(我工作的许多遗传学/基因组学问题很容易被简化为文本处理问题).Perl作为一种语言可能非常宽容,并且可以在Perl中编写非常差但功能强大的代码.就在前几天,我的朋友说他称Perl是一种只写的语言:写一次,理解它一次,并且永远不会尝试回去并在它完成后修复它.
虽然我有时一直在编写糟糕的脚本,但我觉得我还在Perl中编写了一些非常清晰且可维护的代码.但是,如果有人问我是什么使代码清晰可维护,我将无法给出自信的答案.
什么使Perl代码可维护?或者更好的问题是什么使Perl代码难以维护?让我们假设我不是唯一一个维护代码的人,而且像我这样的其他贡献者不是专业的Perl程序员,而是具有编程经验的科学家.
在解释型编程语言中,例如PHP和JavaScript,采用面向对象方法而不是程序方法会产生什么影响?
具体而言,我正在寻找的是在创建Web应用程序和在过程和面向对象方法之间进行选择时要考虑的事项清单,以便不仅优化速度,还要优化可维护性.如果你知道任何进一步探讨这一问题的文章,那么引用的研究和测试用例也会有所帮助.
结论:在解释性语言中使用OO与Procedural进行比较时,性能是否真的有多大(如果有的话)?
oop procedural maintainability performance interpreted-language
在问题有关IOC容器的用途,中奖提交提到,IoC容器,你可以采取这样的:
public class UglyCustomer : INotifyPropertyChanged
{
private string _firstName;
public string FirstName
{
get { return _firstName; }
set
{
string oldValue = _firstName;
_firstName = value;
if(oldValue != value)
OnPropertyChanged("FirstName");
}
}
private string _lastName;
public string LastName
{
get { return _lastName; }
set
{
string oldValue = value;
_lastName = value;
if(oldValue != value)
OnPropertyChanged("LastName");
}
}
}
Run Code Online (Sandbox Code Playgroud)
对此:
var bindingFriendlyInstance = IoC.Resolve<Customer>(new NotifyPropertyChangedWrapper());
Run Code Online (Sandbox Code Playgroud)
问题:
我想为我的Android应用程序创建一个PRO版本,并想知道如何构建我的存储库.
知道我有一个主干和功能分支.我想把专业版放在另一个分支中,但也许有更好的方法?例如,也许我应该创建两个分支 - 一个用于免费版本,另一个用于专业版本?
专业版将具有其他功能,并且将无广告,例如.我不想在专业版中包含AdMob库.
在这种情况下,您对构建存储库的最佳方法有什么经验或建议吗?
编辑:我想我已经在这个帖子中找到了最适合我应用的解决方案:http://groups.google.com/group/android-developers/browse_thread/thread/4ad3d67f735f16d7/948b4f9eee2490a3
这里讨论的技巧是关于另一个应用程序,它只用于解锁实际应用程序中的PRO功能.解锁应用程序在市场上支付,实际应用程序仅检查设备上是否存在该应用程序.
我是一个团队的一员,拥有大约6个UI开发人员,质量各异,而且没有Angular经验.许多人是承包商,对代码库的经验很少.该应用程序具有非常花哨(复杂)的UI.它支持IE8 +(很快就希望IE9 +).
我们引入了Angular作为应用程序的主要扩展,我被要求为团队编写Angular使用指南.
我们将使用指令来创建花哨的UI元素,所有元素都以"ipwr"为前缀,以避免名称冲突.我正在试图决定是否要求开发者给他们的指令限制"元素"或"属性".只限一个,以避免混乱和混乱.
我的问题是:对于指令,"元素"或"属性",哪些限制更好或更受欢迎?我主要担心的是对于具有少量Angular经验且对应用程序代码库不熟悉,减少错误,复制和粘贴行为等的人的易用性.
我有一个函数User::func()(回调),它将由模板类(Library<T>)调用.
在开发的第一次迭代中,每个人都知道func()只为这个目的服务.
几个月后,大多数成员忘记了什么func().
经过一些重构后,func()有时会被一些程序员删除.
起初,我认为这根本不是问题.
但是,在我多次重新遇到这种模式之后,我想我需要一些反制措施.
如何优雅地记录它?(可爱&&简洁&&没有额外的CPU成本)
这是一个简化的代码: -
(现实世界的问题是散布10个以上的库文件和20多个用户文件以及40多个函数.)
Library.h
template<class T> class Library{
public: T* node=nullptr;
public: void utility(){
node->func(); //#1
}
};
Run Code Online (Sandbox Code Playgroud)
User.h
class User{
public: void func(){/** some code*/} //#1
//... a lot of other functions ...
// some of them are also callback of other libraries
};
Run Code Online (Sandbox Code Playgroud)
main.cpp中
int main(){
Library<User> li; .... ; li.utility();
}
Run Code Online (Sandbox Code Playgroud)
作为第一个解决方法,我倾向于添加这样的评论: -
class …Run Code Online (Sandbox Code Playgroud) 作为代码标准文档的一部分,我写了一段时间,我强制执行"你必须总是使用大括号循环和/或条件代码块,甚至(特别是)如果它们只是一行."
例:
// this is wrong
if (foo)
//bar
else
//baz
while (stuff)
//things
// This is right.
if (foo) {
// bar
} else {
// baz
}
while (things) {
// stuff
}
Run Code Online (Sandbox Code Playgroud)
如果你不支持单行,然后有人评论出来,那你就麻烦了.如果你不支持单行,并且缩进在其他人的机器上显示不相同......你就麻烦了.
所以,问题:为什么这会是一个错误的或其他不合理的标准有充分的理由吗?有一些讨论,但没有人能给我一个比"感觉难看"更好的反驳.
我正在使用Lidgren,并且对于我制作的每种新类型的消息,我最终都编写了相同类型的代码.我正在创建一个实例NetOutgoingMessage,在其上运行各种赋值调用,然后在完成后发送它.创建和发送是一样的,所以我想写一个包装器来为我做这个,但它是一个sealed类,它不是IDisposable.我正在做的是:
NetOutgoingMessage om = server.CreateMessage();
om.Write(messageType);
om.Write(data1);
om.Write(data2);
server.SendMessage(om, server.Connections, NetDeliveryMethod.UnreliableSequenced, 0);
Run Code Online (Sandbox Code Playgroud)
我想做的事情如下:
using(AutoNetOutgoingMessage om(server, messageType, NetDeliveryMethod.UnreliableSequenced))
{
om.Write(data1);
om.Write(data2);
}
Run Code Online (Sandbox Code Playgroud)
显然我不能这样using做是否有另一种常见的方法,如果实现这样的功能?我不是在寻找一个非常复杂的解决方案,因为这只是关于我的可维护性,所以我没有问题为每条消息重复我的代码.但我很好奇是否有一个有趣的C#技巧我不知道为此.
maintainability ×10
c# ×2
c++ ×2
performance ×2
.net ×1
android ×1
angularjs ×1
callback ×1
coding-style ×1
oop ×1
perl ×1
procedural ×1
readability ×1
refactoring ×1
scrum ×1
sql-server ×1
templates ×1
unit-testing ×1
using ×1
versioning ×1