小编LBu*_*kin的帖子

.NET Reactive Framework的良好介绍

除了Microsoft文档之外,Microsoft Reactive(Rx)框架是否有一个很好的介绍和教程?

此外,Reactive使用常规异步编码技术解决难以解决的编程问题更容易成为一个很好的例子(使用代码)?

.net c# asynchronous system.reactive

217
推荐指数
6
解决办法
8万
查看次数

代码相当于链式LINQ扩展方法调用中的'let'关键字

使用C#编译器查询理解功能,您可以编写如下代码:

var names = new string[] { "Dog", "Cat", "Giraffe", "Monkey", "Tortoise" };
var result =
    from animalName in names
    let nameLength = animalName.Length
    where nameLength > 3
    orderby nameLength
    select animalName; 
Run Code Online (Sandbox Code Playgroud)

在上面的查询表达式中,let关键字允许将值传递给where和orderby操作,而无需重复调用animalName.Length.

什么是LINQ扩展方法调用的等效集合,它实现了"let"关键字在这里的作用?

c# linq extension-methods linq-to-objects

186
推荐指数
3
解决办法
5万
查看次数

你应该如何从源代码控制构建数据库?

关于数据库对象是否应该受版本控制的SO社区wiki已经有一些讨论.但是,我没有看到很多关于为数据库对象创建构建自动化过程的最佳实践的讨论.

这对我的团队来说是一个有争议的讨论点 - 特别是在评估数据库部署自动化方法的优势和风险时,开发人员和DBA通常有不同的目标,方法和关注点.

我想听听SO社区关于哪些实践在现实世界中有效的一些想法.

我意识到这有点主观,哪些实践真的是最好的,但我认为一个关于哪些工作可能对许多人有帮助的良好对话.

以下是我在此主题中关注领域的一些预告片问题.这些并不是一个明确的清单 - 而是人们帮助理解我正在寻找的东西的起点.

  1. 测试和生产环境都应该从源代码控制构建吗?
    • 是应该使用自动化构建 - 还是应该通过从稳定的,最终的测试环境中复制对象来构建生产?
    • 您如何处理部署脚本中测试和生产环境之间的潜在差异?
    • 您如何测试部署脚本是否可以像测试一样有效地对抗生产?
  2. 哪些类型的对象应该受版本控制?
    • 只是代码(程序,包,触发器,java等)?
    • 指标?
    • 约束?
    • 表定义?
    • 表更改脚本?(例如,ALTER脚本)
    • 一切?
  3. 哪些类型的对象不应该受版本控制?
    • 序列?
    • 资助?
    • 用户帐户?
  4. 如何在SCM存储库中组织数据库对象?
    • 你如何处理转换脚本或ALTER脚本之类的一次性事务?
    • 你如何处理退出数据库中的对象?
    • 谁应该负责对象从开发推广到测试级别?
    • 如何协调来自多个开发人员的更改?
    • 您如何处理多个系统使用的数据库对象的分支?
  5. 如果有的话,可以合理地对这个过程做出哪些例外?
    • 安全问题?
    • 具有去识别问题的数据?
    • 脚本无法完全自动化?
  6. 如何使流程具有弹性和可执行性?
    • 开发者错误?
    • 出乎意料的环境问题?
    • 用于灾难恢复?
  7. 您如何让决策者相信DB-SCM的好处真正证明了成本的合理性?
    • 传闻?
    • 行业研究?
    • 行业最佳实践建议?
    • 向公认的当局上诉?
    • 成本效益分析?
  8. 谁应该在这个模型中"拥有"数据库对象?
    • 开发商?
    • 数据库管理员?
    • 数据分析师?
    • 超过一个?

database language-agnostic version-control

102
推荐指数
2
解决办法
9179
查看次数

您曾经喜欢的编程习惯让您改变了主意?

在我们编程时,我们都会开发我们使用和依赖的实践和模式.然而,随着时间的推移,随着我们的理解,成熟,甚至技术使用的变化,我们逐渐意识到我们曾经认为很棒的一些实践并不(或不再适用).

我曾经经常使用但最近几年改变的一种做法的例子是使用Singleton对象模式.

通过我自己的经验和与同事的长时间辩论,我逐渐意识到单身人士并不总是令人满意 - 他们可以使测试更加困难(通过抑制嘲讽等技术)并且可以在系统的各个部分之间产生不希望的耦合.相反,我现在使用对象工厂(通常使用IoC容器)来隐藏系统中不关心或需要知道的部分单体的性质和存在.相反,他们依靠工厂(或服务定位器)来获取对这些对象的访问权.

我本着自我改善的精神向社会提出的问题是:

  • 您最近重新考虑了哪些编程模式或实践,现在尽量避免?
  • 你决定用什么代替它们?

language-agnostic

99
推荐指数
30
解决办法
7978
查看次数

为什么.NET中没有Tree <T>类?

.NET中的基类库为集合(List,Queue,Stack,Dictionary)提供了一些出色的数据结构,但奇怪的是它不包含二进制树的任何数据结构.对于某些算法,例如利用不同遍历路径的算法,这是非常有用的结构.我正在寻找一个正确编写的免费实现.

我只是瞎了,没找到它......它被埋在BCL的某个地方吗?如果没有,有人可以为二进制树推荐免费或开源的C#/.NET库吗?优选使用仿制药的一种.

编辑:澄清我在寻找什么.我对内部使用树的有序字典集合不感兴趣.我实际上对二叉树感兴趣 - 一个公开其结构的树,以便您可以执行诸如提取子树或在节点上执行修复后遍历等操作.理想情况下,这样的类可以扩展为提供专门树的行为(即红/黑,AVL,平衡等).

.net c# data-structures

82
推荐指数
6
解决办法
4万
查看次数

Reflection.Emit与CodeDOM

使用Reflection.Emit库与CodeDOM在运行时动态生成代码有什么优缺点?

我试图在基于XML格式运行时可用元数据的系统中生成一些(相对复杂的)动态类.我将生成扩展应用程序集中现有类的类,实现其他接口,添加方法以及覆盖虚拟和抽象成员.

我想确保在深入实现之前选择适当的技术.有关这些不同代码生成技术如何不同的任何信息都会有所帮助.此外,任何有关简化或简化工作的开源库的信息都将是有用的.

.net c# code-generation codedom reflection.emit

50
推荐指数
3
解决办法
1万
查看次数

SQL Server中的可延迟约束

任何版本的SQL Server都支持可延迟约束(DC)吗?

从版本8.0开始,Oracle支持可延迟约束 - 仅在提交语句组时评估的约束,而不是在插入或更新单个表时.可延迟约束不仅仅是禁用/启用约束,因为约束仍处于活动状态 - 它们仅在稍后(批处理提交时)进行评估.

DC的好处是它们允许评估单独非法的更新,这些更新累积地导致有效的最终状态.一个示例是在两行之间的表中创建循环引用,其中每行需要存在一个值.没有单独的插入语句会通过约束 - 但组可以.

为了阐明我的目标,我希望将C#中的ORM实现移植到SQLServer - 遗憾的是,实现依赖于Oracle DC来避免在行之间计算插入/更新/删除命令.

sql database sql-server oracle constraints

33
推荐指数
2
解决办法
2万
查看次数

企业服务总线的好处

我在哪里可以找到有关企业服务总线(ESB)的用途和好处的一些信息?

我正在寻找有关的信息:

  1. 问题的种类和ESB有助于解决
  2. ESB的替代方案 - 以及在它们之间进行选择的权衡
  3. 作为开发人员,您需要做什么来构建与ESB兼容的系统

我正在寻找比维基百科或供应商的在线营销手册更精细的细节.理想情况下,一些示例代码将有助于阐明利用ESB所涉及的内容.从.NET或Java角度来看,信息最有用.

谢谢.

.net java architecture esb

31
推荐指数
4
解决办法
3万
查看次数

从MethodInfo打印方法的完整签名

.NET BCL中是否有任何现有功能可以使用MethodInfo提供的信息在运行时打印方法的完整签名(就像您在Visual Studio ObjectBrowser中看到的那样 - 包括参数名称)?

因此,例如,如果查找String.Compare(),其中一个重载将打印为:

public static int Compare(string strA, int indexA, string strB, int indexB, int length, bool ignoreCase, System.Globalization.CultureInfo culture)
Run Code Online (Sandbox Code Playgroud)

请注意包含所有访问和范围限定符的完整签名以及包括名称的完整参数列表.这就是我要找的东西.我可以编写自己的方法,但如果可能的话,我宁愿使用现有的实现.

.net c# reflection debugging

29
推荐指数
2
解决办法
2万
查看次数

(Mis)使用C#迭代器实现协同程序的缺陷

我正在编写重构Silverlight程序,以从WCF服务中消耗其现有业务逻辑的一部分.在这样做时,我遇到了Silverlight 3中的限制,它只允许对WCF服务的异步调用,以避免长时间运行或无响应的服务调用阻塞UI线程(SL有一个有趣的排队模型来调用WCF服务)在UI线程上).

因此,编写曾经很简单的东西变得越来越复杂(请参阅我的问题末尾的代码示例).

理想情况下,我会使用协同程序来简化实现,但遗憾的是,C#目前不支持协同程序作为本机语言工具.但是,C#确实具有使用yield return语法的生成器(迭代器)的概念.我的想法是重新使用yield关键字,以允许我为相同的逻辑构建一个简单的协同模型.

但是,我不愿意这样做,因为我担心可能存在一些我没有预料到的隐藏(技术)陷阱(考虑到我对Silverlight和WCF的相对缺乏经验).我也担心未来的开发人员可能不清楚实现机制,并且可能会阻碍而不是简化他们将来维护或扩展代码的努力.我已经在SO上看到了关于重构迭代器以构建状态机的问题:使用"yield"关键字实现状态机,虽然它与我正在做的事情不完全相同,但它确实让我停下来.

但是,我需要做一些事情来隐藏服务调用的复杂性,并管理此类更改中的缺陷的工作量和潜在风险.我对可以用来解决这个问题的其他想法或方法持开放态度.

原始的非WCF版本的代码看起来像这样:

void Button_Clicked( object sender, EventArgs e ) {
   using( var bizLogic = new BusinessLogicLayer() ) {
       try  {
           var resultFoo = bizLogic.Foo();
           // ... do something with resultFoo and the UI
           var resultBar = bizLogic.Bar(resultFoo);
           // ... do something with resultBar and the UI
           var resultBaz = bizLogic.Baz(resultBar);
           // ... do something with resultFoo, resultBar, resultBaz
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

重新考虑的WCF版本变得更加复杂(即使没有异常处理和前/后条件测试):

// fields needed to …
Run Code Online (Sandbox Code Playgroud)

c# wcf asynchronous yield silverlight-3.0

15
推荐指数
1
解决办法
6606
查看次数