小编Gie*_*ius的帖子

实体做得太多了?

我有一个旧的谜题,所以我想我会与你分享,可能会得到正确的方向.事实上,我们在数据库中的一些实体非常大(读取有很多属性),很少有业务逻辑使用所有实体属性,因此每次我需要考虑必须加载哪些属性才能使业务逻辑正常工作.非常假设的样本:

public class Product 
{
    public string Title {get;set;}
    public string Description {get;set;}

    public string RetailPrice {get;set;}
    public string SupplierId {get;set;}

    public Supplier Supplier { get;set;}

    // many other properties
}

public class ProductDiscountService
{
    public decimal Get(Product product)
    {
        // use only RetailPrice and Supplier code
        return discount;
    }
}

public class ProductDescriptionService 
{
    public string GetSearchResultHtml(Product product) 
    {
        // use only Title and Description
        return html;
    }
}
Run Code Online (Sandbox Code Playgroud)

看起来我可以提取接口IDiscountProduct和ISearchResultProduct,将产品标记为实现这些接口,然后创建实现每个接口的较小DTO,但是现在看起来有点矫枉过正(至少我没有看到有人使用接口对属性进行分组) .

将数据库中的实体拆分为较小的实体也看起来不合理,因为所有这些属性都属于产品,我担心我会被迫使用很多连接来选择某些东西,如果我决定某些属性属于另一个实体,这一举动将很难实施.

将特定方法的业务逻辑中使用的每个属性作为方法参数看起来也是不好的解决方案.

c# architecture dependencies linq-to-sql

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

ASP.NET MVC3 CSS框架

我想知道,哪个css框架最适合ASP.NET MVC 3?我已经尝试了yaml,在我看来它有几个缺点,至少使用ASP.NET MVC 3:

  1. 默认情况下使用按钮输入(因此,与jquery ui不兼容,因为jquery ui使用对话框中的按钮).
  2. 你需要为ASP.NET MVC 3验证调整css.
  3. 我不喜欢他们如何描述形式(这可能只是我对此的主观意见,无论如何,如果你希望坚持yaml css风格,你需要使用自定义编辑器).
  4. 一些css类名称不是很直观.

没什么,那将是显示停止者,但也许有更好的选择 - 某些东西,适用于ASP.NET MVC细节,或者可能是ASP.NET MVC项目存根,适用于yaml css框架.

更新:OOCSS看起来不错,重量轻,结构良好,值得一试.
更新2:TwitterBootstrap也越来越受欢迎,你可以在这里获取它的asp.net mvc http://nuget.org/packages/Twitter.Bootstrap

css-frameworks asp.net-mvc-3

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

如何告诉谷歌机器人跳过部分HTML?

有很多关于相反情况的信息,当人们尝试使用HTML时,谷歌机器人可以看到,但用户看不到,在我的情况下,我需要相反的东西 - 从谷歌机器人隐藏一些HTML.问题是如何?

Flash不是一个答案,
宁愿不使用花哨的ajax东西(主要是因为我需要它,而不是文件准备好),
而且robots.txt也不是答案,因为它适用于网址,而不是页面的一部分.任何特殊的CSS /简单的JavaScript工作,是否有任何特殊的HTML标签?

html css seo

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

将ravendb查询作为Func <T传递,bool>不起作用

我正在玩RavenDb并想知道我是否遗漏了一些明显的东西.

事情是,如果我传递这样的查询:

  var name = "test";
  posts = RavenSession.Query<Post>()
         .Where(x => x.Tags.Any(y => y == name))
         .OrderByDescending(x => x.CreatedAt)
         .Take(5);
Run Code Online (Sandbox Code Playgroud)

它工作正常,如果我正在编写等效(IMO)使用Func<T, bool>,它不会崩溃,但在条件:

 var name = "test";     
 Func<Post, bool> selector = x => x.Tags.Any(y => y == name);
 posts = RavenSession.Query<Post>()
         .Where(x => selector(x))
         .OrderByDescending(x => x.CreatedAt)
         .Take(5);
Run Code Online (Sandbox Code Playgroud)

Profiler输出如下:

query = start = 0 pageSize = 5 aggregation = None sort = -CreatedAt

更新:如果我使用表达式而不是Func,它可以工作,所以我想我可能记得Func和Linq有些错误,所以写了一个简单的测试:

var range = Enumerable.Range(1, 50);

Func<int, bool> selector = x => x == 42;
var …
Run Code Online (Sandbox Code Playgroud)

c# ravendb

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

创建帖子表单并使用 jQuery 提交的最短方法是什么?

我有一个属性的按钮data-url,并data-parameter和需要张贴到控制器。问题是,该控制器将返回一个重定向,所以$.post在这里并没有真正的帮助,我正在考虑动态创建表单并提交它。
我认为这是很常见的任务,但我在 jQuery 上找不到任何捷径来做到这一点,最短/最好的方法是什么?

jquery

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

如何配置Windsor通过依赖关系树将依赖关系作为参数传递?

我有以下组成部分:

public interface IJob {
    ILogger Logger { get; set; }
}

public class JobC : IJob
{
    public ILogger Logger { get; set; }
    private ServiceA serviceA;
    private ServiceB serviceB;

    public JobC(ServiceA serviceA, ServiceB serviceB)
    {
        this.serviceA = serviceA;
        this.serviceB = serviceB;
    }
}

public class ServiceB
{
    public ILogger Logger { get; set; }
}

public class ServiceA
{
    public ILogger Logger { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,到处都有Logger属性。问题是,我需要在解析期间传递该属性值(不同的作业需要不同的配置记录器)。因此,如果只有顶层组件需要它,那么它就像

var childLogger = Logger.CreateChildLogger(jobGroupName);
var job = windsorContainer.Resolve(jobType);
job.Logger = …
Run Code Online (Sandbox Code Playgroud)

c# castle-windsor

5
推荐指数
1
解决办法
743
查看次数

应用程序池回收导致非常长的响应时间

我已经读过某个地方,当启用重叠时,应用程序池回收不应该对最终用户非常明显,但在我的情况下,响应时间至少比通常长10倍(取决于负载,来自常规的响应时间) 100毫秒长到5000毫秒).这也不是针对单个请求,而是在池回收之后的几个请求(我在测试时使用了~10个并发连接).

所以问题是:

  1. 在我看来,我没有做任何事情,这需要很长时间才能启动应用程序 - 一般来说,这只是IoC容器和路由初始化,甚至我也会做一些事情 - 这是重叠应该注意什么?
  2. 在池回收期间是否破坏了sql连接池,这可能是响应时间长的原因吗?
  3. 什么是描述需要这么长时间的最好的方法?也许可能有想法,从IIS/.NET方面可能需要这么长时间,以及如何避免这种想法.

asp.net-mvc iis-7 asp.net-mvc-3

5
推荐指数
1
解决办法
1399
查看次数

EntityFramework - 查询执行时间取决于选择顺序?

我注意到了奇怪的行为.我有商家和订单表,做两个选择一个,其他,选择非常简单(从商家选择*,从订单中选择*).

这是sql profiler跟踪,当我选择第一个商家时,然后订单: 在此输入图像描述

注意,订单选择正在服用75秒(这是一个~80.000记录,在一台非常体面的机器8gb ram,ssd,i7).

现在,如果我更改顺序并选择第一个订单,那么商家: 在此输入图像描述

在分析器中,命令查询执行时间下降到2.5秒,但在应用程序中它与第一种情况大致相同(我猜是因为EF内部尝试将订单绑定到商家,因为它们之间存在外键).

所以问题是为什么分析器看到不同的时间以及EF在第二种情况下做了多长时间,可能是某些配置错误了?

更新:我已经开始使用干净的EF模型本地化问题,它可以正常工作.我正在使用EF T4模板来生成上下文和实体类,因此它可能已经过时并导致问题,将会知道是否会找到具体的东西 - 我认为这与修复集合有某种关系,所以看起来像SQL分析器有误导性 - 我猜查询执行正常,只是等待EF完成阅读结果或smth(我的意思是EF可能会在阅读结果时做一些有用的事情).

 using (var myEntities = new myEntities())
        {
            var merchants = myEntities.Merchants.ToList();
            var orders = myEntities.Orders.ToList();
        }
Run Code Online (Sandbox Code Playgroud)

c# t-sql entity-framework entity-framework-4

5
推荐指数
1
解决办法
841
查看次数

NServiceBus - 如何为每个接收者订阅的消息类型获取单独的队列?

我有以下情况:

在此输入图像描述

因此,接收者订阅了两种事件:eventA和eventB.NServiceBus为接收方(Receiver)创建队列,并将eventA和eventB类型的消息放入同一队列.问题是,如果我可以配置NServiceBus为接收器的每种类型的事件使用单独的队列(ReceiverEventA和ReceiverEventB)?或者我可以在单个进程中有两个接收器(并且每个接收器单独的队列).事实上,EventA需要比EventB更长的处理时间,并且它们是独立的 - 所以如果它们在不同的队列中,它们可以同时处理.

更新:如果我采用这样的天真方法,接收器无法启动null引用异常:

 private static IBus GetBus<THandler, TEvent>()
    {                   
        var bus = Configure.With(new List<Type>
                                     {
                                         typeof(THandler), 
                                         typeof(TEvent),
                                         typeof(CompletionMessage)
                                     })
            .Log4Net()
            .DefaultBuilder()
            .XmlSerializer()
            .MsmqTransport()
            .IsTransactional(true)
            .PurgeOnStartup(false)
            .UnicastBus()
            .LoadMessageHandlers()
            .ImpersonateSender(false);

        bus.Configurer.ConfigureProperty<MsmqTransport>(x => x.InputQueue, "Queue" + typeof(THandler).Name);

        return bus.CreateBus().Start();
    }

    [STAThread]
    static void Main()
    {
        Busses = new List<IBus>
                     {
                         GetBus<ItemEventHandlerA, ItemEventA>(),
                         GetBus<ItemEventHandlerB, ItemEventB>()
                     };          

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new TestForm());
    }
Run Code Online (Sandbox Code Playgroud)

异常堆栈跟踪是:

在NServiceBusTest2.WinFormsReceiver.Program.GetBusTHandler,C:\ Users\User\Documents\Visual Studio 2010\Projects\NServiceBusTest2\NServiceBusTest2.WinFormsReceiver\Program.cs
中的TEvent :位于NS的NServiceBusTest2.WinFormsReceiver.Program.Main()中的第57行:\ Users\User\Documents\Visual Studio 2010\Projects\NServiceBusTest2\NServiceBusTest2.WinFormsReceiver\Program.cs:
System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly,String [] args)第26行
,System.AppDomain.ExecuteAssembly(String assemblyFile) ,证据assemblySecurity,String [] args)在
System.Threading.ExecutionContext.Run上的System.Threading.ThreadHelper.ThreadStart_Context(Object state) …

c# nservicebus

5
推荐指数
1
解决办法
2559
查看次数

使用Resharper 7提取类

在resharper功能页面中:

Extract Class
启用将类的某些字段和方法提取到单独的新创建的类中.当一个类变得太大,太不连贯或者做太多事情时,这种重构很有用.

我在类中选择了几个方法,打开上下文菜单,找不到与提取类相关的任何内容,我是否会遗漏一些东西?

c# resharper

5
推荐指数
1
解决办法
1098
查看次数