我在一个中等规模的团队(20多名开发人员)工作,我相信团队成员之间的沟通并不尽如人意.
像大多数团队一样,我想,我们有几个系统可以构建和维护.我们还在工作中使用了许多不同的工具,如Visual Studio 2008,Subversion,Resharper,Tibco,TeamCity等.
我们也使用"敏捷"方法进行开发......我把它放在引号中,因为它看起来更像是"赶紧尽快获得这个功能......我们将在一周内为您准备好规范......现在就开始研究它,但一定要对它进行单元测试,然后由某人审查代码".
正因为如此,我们的系统设计很差,因此难以维护....所以我们最终会有一些人作为"大师",他们非常熟悉他们创建的系统.
此外,由于整个IT行业的步伐,我们经常需要使用新技术和我们开发的最新版本的工具.
我的观点是不要抱怨并说"噢,我的事情很困难"......而我的担心是,除非我们的团队开始更好地沟通,否则我们将陷入困境.
让我试着用更好的沟通来解释我的意思......
最近我们刚刚从VS2005升级到VS2008 ......这在我看来很棒,因为我喜欢使用最新的技术.我们也从CruiseControl.Net转移到了TeamCity ......这一切都很好.
......但......我们从未真正接受过VS2008的任何培训或C#3.0的新功能......甚至没有关于TeamCity的备忘录......作为IT人员,我们似乎有望适应和学习走.
现在显然我可以通过阅读博客并关注我使用的工具的最新消息来找到这些信息......我做了......但是团队中的每个人都没有实践持续学习的实践,所以你最终人们使用新功能而不真正了解它们......
此外,我们的团队最近已被指示开始进行代码审查......但没有任何关于这意味着什么的指导....目前它只是意味着将代码交给某人......任何人......在团队中并让他们看看你的代码......无论是两秒还是两小时,它在整个团队中都没有真正建立或统一......如果他们甚至完成了......
编写单元测试也是如此...我们一直鼓励他们编写它们......但它并没有在团队范围内进行沟通,编写它们的最佳方法是......所以一些开发人员尝试编写它们,找到它们这很困难,要么写不好的单元测试,要么放弃并决定单元测试是一个坏主意......
我提出的帮助改善情况的想法是组织一系列会议作为开发者论坛......在这些会议中,团队成员将提出一个不同的主题,剩下的时间用于讨论开发人员.
一个星期的主题可能是C#的一个高级新功能和围绕它的推荐最佳实践....下一个可能是关于代码评论和寻找什么......而下一个可能是对一个模糊遗产的介绍系统......然后开发人员可以使用讨论来分享他们的经验和问题.最终目标是建立一个可以在开发人员之间自由分享想法和信息的地方.
我得到了我的经理和我的几位开发人员的支持以获得一些信息...但我被告知这样的想法之前已经尝试过并最终消失了.
我希望这个想法能够取得成功,而不是在我最终离开这家公司的时候,我会全力以赴地把它弄死.
那我怎么能鼓励我的团队更好地沟通呢?我对开发者论坛的想法听起来像个好主意吗?我该怎么做才能防止它消失?
有没有更好的东西我可以做而不是我没想到的?
不仅仅是开始一系列会议......我如何鼓励和影响我的团队开始团队表演?我真的很喜欢我的工作,并且相信我正在与一群优秀的开发人员合作......但我也非常想在一个我认为目前有点缺乏的领域为团队增值.我该如何有效地做到这一点?
我目前正在重构一个控制台应用程序,其主要职责是根据存储在数据库中的值生成报告.
我现在创建报告的方式如下:
const string format = "<tr><td>{0, 10}</td><td>
{1}</td><td>{2, 8}</td><td>{3}</td><td>{4, -30}</td>
<td>{5}</td><td>{6}</td></tr>";
if(items.Count > 0)
{
builder.AppendLine(
String.Format(format, "Date", "Id", "WorkItemId",
"Account Number", "Name", "Address", "Description"));
}
foreach(Item item in items)
{
builder.AppendLine(String.Format(format, item.StartDate, item.Id,
item.WorkItemId, item.AccountNumber,
String.Format("{0} {1}",
item.FirstName, item.LastName),
item.Address, item.Description));
}
string report = String.Format("<html><table border=\"1\">{0}
</table></html>",
builder.ToString());
Run Code Online (Sandbox Code Playgroud)
(以上只是一个示例......并对格式化感到抱歉......我试着将其格式化,因此不需要水平滚动....)
我真的不喜欢这样做我已经这样做了.它现在可以正常工作......但我认为它不可维护......特别是如果报告在需要创建的html方面变得更复杂的话.更糟糕的是,我的团队中的其他开发人员肯定会复制并粘贴我的代码,用于生成HTML报告的应用程序,并且可能会造成可怕的混乱.(我已经看到了这样的恐怖产生!想象一下一个报告函数,它有数百行硬编码的sql来检索报告的细节......它足以让一个成年男子哭!)
然而,虽然我根本不喜欢这个......我只是想不出一个不同的方式去做.
当然必须有办法做到这一点......我很确定.不久前,我在aspx页面中生成表时做了同样的事情,直到有人向我展示我可以将对象绑定到控件并让.NET处理渲染.它将类似于上面代码的可怕代码变成了两三条优雅的优点.
有没有人知道为这个报告创建html的类似方法而不用硬编码html?
在我工作的公司,我们使用subversion和TortoiseSVN来管理我们的源代码.每个项目都从主干分支出来.当我们需要为发布集成不同的项目时,我们创建一个发布分支,其中包含将被集成,测试和部署到生产的代码.通常我们只有一个发布分支.
然而,最近,其中一个项目中的一些项目被推迟,并计划进入下一个版本.因此,有人要求创建第二个版本分支以保留延迟的更改并防止它们合并到当前版本中.
到目前为止,这已经给我们带来了很多悲伤和许多树冲突,因为未来版本分支中的某些项目依赖于当前版本分支中的项目.我们能够解决这些问题的唯一方法是等到部署当前版本,将发布分支合并到主干,将主干合并到未来发布分支,然后将更改从项目分支合并到未来发布分支.
由于这个问题我们不得不建议我们永远不应该有多个发布分支,因为它会导致合并问题.
但是,我想知道这是否是正确的方法.有谁知道是否有可能在subversion中管理多个发布分支?当然,必须能够管理延迟而不会影响合并能力的功能.
有没有人对我提出的你愿意分享的情景有任何经验?我想知道如何改进我在工作场所管理版本的方式,这样就不会再发生了.
有没有人知道在开发Tibco流程时可用的单元测试工具?
在接下来的几个月里,我将参与一个Tibco项目,我正在尝试找到任何现有的单元测试框架,这些框架可能会使TDD方法更容易构建.
到目前为止,我能找到的唯一一个名为BWUnit.看起来不错,但它目前处于测试版和商业软件中.如果可能的话,我想使用开源工具,但只要它能够做得很好我就会很高兴.
那么有人知道Tibco开发的任何其他单元测试工具吗?
另外,有没有人有BWUnit的经验?它有多有用?
我有一个VS2005项目,其中包含一些Web服务引用.该项目最近已升级到VS2008,但现在Web引用存在问题......可能是因为它们可能没有正确升级.
当我选择更新Web引用时,我收到以下错误:
"值不能为null.参数名称:discoveryError%mexError",这非常有用.
我已经删除了网络参考,意图重新添加它...
将出现"添加Web引用"对话框,并成功加载有关与Web服务关联的每个方法的信息.
但是,我无法添加引用,因为这样做的按钮显示为灰色,并且有一个标题为"在此URL找到的Web服务:"的文本框,其中包含文本"由于当前状态,操作无效宾语".
现在终于,这让我想到了我的主要问题......那么我如何添加这个网络参考?或者更好的是,我如何找出"对象的当前状态"无效?
有没有人在VS2008中有类似的经历?
Linq是.NET的一个很棒的补充,我发现它在很多情况下都很好用,即使我刚开始学习如何使用Linq.
然而,在我对Linq所做的阅读中,我发现开发人员需要注意一些微妙的事情,这可能会导致麻烦.
我已经提到了一个明确的警告,我发现这是延迟执行的结果.
所以我想知道,对于Linq来说,Linq的新手应该知道哪些其他注意事项?
在设置WCF客户端服务配置时,有一个选项"集合类型",默认为"System.Array".如果我将其更改为"通用列表",是否有任何性能损失?
最近我偶然发现了这个名为nodeJS的漂亮JS库,它就像服务器端JS一样.
该语言的主要特性是Evented I/O,它使I/O的固有容量完全无阻塞,使用回调!
我的问题是,如果过去存在这种完全无阻塞的I/O机制(给定事件驱动的I/O已经存在了很长时间),为什么它们在C#等高级语言中更受欢迎? Java(虽然Java具有支持非阻塞I/O的NIO实现)?
目前,简单的文件读/写操作会导致完整的I/O阻塞,而事件驱动的I/O则不然.
我想更好地理解事件驱动的I/O以及它与Java中的不同之处.
我有一个线程每40毫秒(25赫兹)生成一个网络数据包,它是一个无限循环(直到被告知停止),我正在使用thread.sleep.
当我构建数据包时,其中一个值是当前的GPS时间,使用DateTime.UtcNow并添加闰秒.
这在我开始时工作正常,但随着时间的推移漂移,大约2小时后,它落后了5秒.
我有一个Symmetrom GPS时间服务器,我正在使用他们的软件作为NTP客户端,它说PC上的累积漂移大约是1.2秒(我注意到的大多数是在PC关闭而不同步时漂移到NTP).
任何人都知道什么是错的?我知道thread.sleep不是完美的计时,而Windows不是RTOS,但漂移没有意义,丢帧会.
由于一些专有和ITAR问题,我无法发布代码,但我可以发布一个粗略的大纲:
while(!abort) {
currentTime = DateTime.UtcNow + leapSeconds ;
buildPacket(currentTime);
stream.Write(msg, 0, sendSize);
//NetworkStream Thread.Sleep(40);
}
Run Code Online (Sandbox Code Playgroud)
我在Windows 7并使用Visual Studios 2010.
在上一个问题中,Herbie博士对已接受答案的评论之一是我的方法执行了两项职责......即更改数据和保存数据.
我想弄清楚的是在我的情况下分离这些问题的最佳方法.
继续我的示例有一个通过NHibernate检索的Policy对象....
我目前将策略设置为非活动状态的方式如下:
Policy policy = new Policy();
policy.Status = Active;
policyManager.Inactivate(policy);
//method in PolicyManager which has data access and update responsibility
public void Inactivate(Policy policy)
{
policy.Status = Inactive;
Update(policy);
}
Run Code Online (Sandbox Code Playgroud)
如果我将数据访问和数据更新的责任分开,那么最好的方法是什么呢?
最好让PolicyManager(充当dao的网关)管理Policy对象的状态:
Policy policy = new Policy();
policy.Status = Active;
policyManager.Inactivate(policy);
policyManager.Update(policy);
//method in PolicyManager
public void Inactivate(Policy policy)
{
policy.Status = Inactive;
}
Run Code Online (Sandbox Code Playgroud)
或者让Policy对象维护它自己的状态,然后使用manager类将信息保存到数据库:
Policy policy = new Policy();
policy.Status = Active;
policy.Inactivate();
policyManager.Update(policy);
//method in Policy
public void Inactivate()
{
this.Status …Run Code Online (Sandbox Code Playgroud) c# ×4
.net ×3
agile ×1
blocking ×1
events ×1
frameworks ×1
hard-coding ×1
html ×1
io ×1
linq ×1
node.js ×1
nonblocking ×1
performance ×1
reporting ×1
svn ×1
tibco ×1
timing ×1
tortoisesvn ×1
unit-testing ×1
upgrade ×1
wcf ×1
web-services ×1