小编Jas*_*omb的帖子

更重要的是,代码的可测试性或遵守OOP原则?

我的团队TDD的演变包括似乎偏离了传统的oop.

  1. 远离自给自足的类我们仍然在适当的地方封装数据.但是为了模拟任何辅助类,我们通常会创建一些通过构造函数或mutator在外部设置它们的方法.

  2. 我们永远不会使用私有方法.为了利用我们的模拟框架(RhinoMocks),这些方法不能是私有的.这是向我们的传统开发者"销售"的最大的一个.在某种程度上,我看到了他们的观点.我只是更看重测试.

你的想法是什么?

oop tdd mocking

17
推荐指数
5
解决办法
1508
查看次数

使用Where()查询Raven只过滤前128个文档?

我们正在使用Raven来验证登录,以便人们可以进入我们的网站.

我们发现如果你这样做:

// Context is an IDocumentSession 
Context.Query<UserModels>()
           .SingleOrDefault(u => u.Email.ToLower() == email.ToLower()); 
Run Code Online (Sandbox Code Playgroud)

该查询仅过滤Raven中文档的前128个文档.在我们的数据库中有几千个,所以除非你的电子邮件恰好在第一个128返回,否则你运气不好.

Raven示例代码或我在网上遇到的任何示例代码都没有使用Skip()和Take()迭代整个集合执行任何循环.

  1. 这是Raven的理想行为吗?
  2. 即使您使用高级Lucene查询,它是否也是相同的行为?即; 高级查询的行为有何不同?
  3. 下面的解决方案是否合适?看起来有点难看.:P

我的解决方案是循环遍历所有文档的集合,直到遇到非null结果,然后我中断并返回.

public T SingleWithIndex(string indexName, Func<T, bool> where)
{
    var pageIndex = 1;
    const int pageSize = 1024;
    RavenQueryStatistics stats;

var queryResults = Context.Query<T>(indexName)
    .Statistics(out stats)
    .Customize(x => x.WaitForNonStaleResults())
    .Take(pageSize)
    .Where(where).SingleOrDefault();

if (queryResults == null && stats.TotalResults > pageSize)
{
    for (var i = 0; i < (stats.TotalResults / (pageIndex * pageSize)); i++)
    {
        queryResults = Context.Query<T>(indexName)
            .Statistics(out stats)
            .Customize(x => …
Run Code Online (Sandbox Code Playgroud)

lucene ravendb

7
推荐指数
1
解决办法
1178
查看次数

如果.NET工作进程崩溃,其他用户会发生什么?

我对ASP.Net工作进程如何处理进程的了解非常不足.我希望那里的一些专家能够帮助我.

如果我使用System.OutOfMemoryException使工作进程崩溃,那么用户体验的是同一进程所服务的其他用户?他们会得到一个空白的屏幕吗?503错误?

我将尝试与我们实验室中的其他人一起测试这种情况,但我想我会把它漂浮在那里.我会用我们的结果更新.

更新:我们的结果各不相同.如果我们人为地引发OOM异常(例如通过将更大和更大的PDF加载到内存中),那个工作进程所服务的其他线程将暂时"挂起"然后完成,而其他线程似乎永远不会返回.谢谢你的回复.

c# asp.net process worker http-status-code-503

6
推荐指数
1
解决办法
3020
查看次数

是否有任何开源C#库用于将属性从一个类绑定到另一个类?

我不记得我正在阅读哪个博客,因为它当时似乎是学术性的,但是有一个库正在讨论中你可以采取两个具体的类,如果名称匹配,将属性绑定在一起.想想ASP.NET MVC模型绑定.

c# data-binding binding

4
推荐指数
1
解决办法
566
查看次数

锁定HttpRuntime.Cache以进行延迟加载

我们有一个运行.NET 2.0的网站,并开始使用ASP.Net HttpRuntime.Cache来存储频繁数据查找的结果,以减少我们的数据库访问.

片段:

 
lock (locker)
{
    if (HttpRuntime.Cache[cacheKey] == null)
    {
        HttpRuntime.Cache.Insert(cacheKey, GetSomeDataToCache(), null, DateTime.Today.AddDays(1), Cache.NoSlidingExpiration);       
    }
    return ((SomeData)HttpRuntime.Cache[cacheKey]).Copy();
}
Run Code Online (Sandbox Code Playgroud)

每当我们想要查看缓存时,我们都会悲观地锁定.但是,我已经看到网上发布的各种博客建议您在检查缓存值后锁定,以免产生锁定开销.这似乎不正确,因为另一个线程可能在检查后写入缓存.

所以最后我的问题是这样做的"正确"方法是什么?我们甚至使用正确的线程同步对象吗?我知道ReaderWriterLockSlim(),但我们正在运行.NET 2.0.

multithreading synchronization caching locking httpruntime

3
推荐指数
2
解决办法
4701
查看次数

将SQL Server 2005置于单用户模式所需的SQL是什么?

我想知道如何(以及可能的话)使用SQL语句将SQL Server 2005置于单用户模式?

我在MSDN上找到了这些说明,但是他们需要SSMS.

http://msdn.microsoft.com/en-us/library/ms345598(SQL.90,loband).aspx

*将数据库设置为单用户模式

  1. 在对象资源管理器中,连接到SQL Server 2005数据库引擎的实例,然后展开该实例.
  2. 右键单击要更改的数据库,然后单击"属性".
  3. 在"数据库属性"对话框中,单击"选项"页面.
  4. 从"限制访问"选项中,选择"单个".
  5. 如果其他用户连接到数据库,则会显示"打开连接"消息.要更改属性并关闭所有其他连接,请单击"是".*

sql sql-server sql-server-2005

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