我读过DDD Evans,我正在尝试使用C#和Entity Framework 4.1 + LINQ进行聚合根存储库设计.
但是,我担心发送到数据库的实际查询.我正在使用SQL 2008 R2,并运行SQL事件探查器来检查数据库在响应LINQ代码时正在做什么.
考虑使用Person和EmailAddress的简单2实体设计.一个人可以拥有零到多个EmailAddresses,而EmailAddress必须只有一个Person.Person是聚合根,因此不应该有电子邮件地址的存储库.应从Person存储库中选择电子邮件地址(根据DDD Evans).
为了比较,我确实为电子邮件地址设置了临时存储库.以下代码行:
var emailString = "someone@somewhere.com";
var emailEntity = _tempEmailRepository.All.SingleOrDefault(e =>
e.Value.Equals(emailString, StringComparison.OrdinalIgnoreCase));
Run Code Online (Sandbox Code Playgroud)
...根据探查器执行一个很好的干净SQL查询:
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[PersonId] AS [PersonId],
[Extent1].[Value] AS [Value],
[Extent1].[IsDefault] AS [IsDefault],
[Extent1].[IsConfirmed] AS [IsConfirmed],
FROM [dbo].[EmailAddress] AS [Extent1]
Run Code Online (Sandbox Code Playgroud)
我可以使用以下代码从人员存储库中选择电子邮件:
var emailEntity = _personRepository.All.SelectMany(p => p.Emails)
.SingleOrDefault(e => e.Value.Equals(emailString,
StringComparison.OrdinalIgnoreCase))
Run Code Online (Sandbox Code Playgroud)
这在运行时获取了相同的实体,但在SQL事件探查器中显示了不同的命令:
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[FirstName] AS [FirstName],
[Extent1].[LastName] AS [LastName],
FROM [dbo].[Person] AS [Extent1]
Run Code Online (Sandbox Code Playgroud)
除了从Person中选择的上述查询之外,还有许多"RPC:Completed"事件,一个用于DB中的每个EmailAddress行:
exec sp_executesql N'SELECT
[Extent1].[Id] AS [Id],
[Extent1].[PersonId] AS [PersonId], …
Run Code Online (Sandbox Code Playgroud) 在参考这些相关 问题时,我已经在VS2010中设置了CSS3验证一段时间.
但是,每次关闭CSS文件时,css工具条中的"用于验证的级联样式表"下拉列表将从CSS 3.0更改为CSS 2.1.重新打开css文件时,我需要重新选择CSS 3.0以避免验证错误.
有没有办法改变默认值?即使是注册表黑客在这一点上也是可以接受的,这真的很烦人.
在编辑cshtml文件时,更改默认值还有另一个好处.如果未打开CSS文件,验证目标下拉列表将显示为灰色.因此要将其更改为3.0,您必须打开一个CSS文件.另一个烦恼.
我检查了工具>选项>文本编辑器> CSS,但没有像HTML那样的验证选项卡.
validation default-value visual-studio-2010 css3 toolstripdropdown
按照上一个问题,我有一些代码需要获得带有私钥的X509证书.如答案中所述,在生产中,这将使用X509Store发生.
单元测试的最佳方法是什么?我想使用不同于生产的证书来开发和测试,因此我可以创建一个CertificateRepository接口来提供不同的实现.
对于测试/开发实现,最好只使用证书的base64编码字符串,并使用虚拟密码和专用测试/开发证书创建一个证书实例.但到目前为止,我一直无法弄清楚如何使用私钥作为base64字符串对证书进行编码.每次我尝试从MMC导出证书作为base-64时,它只对公钥进行编码.
今天检查AppHarbor.我的主要问题是标题,但我还有其他与git + windows相关的问题.
首先,与此视频相关.我喜欢我可以为部署指定配置转换的想法.我的问题是,它必须是Web.Release.config转换吗?我实际上想通过将其用作集成测试的qa部署来测试它.我可以将变换指定为Web.DeployToAppHarbor.config吗?
其次,我已经读过有关crlf问题的内容.当我跑步时git add .
,我应该得到所有这些消息吗?
warning: CRLF will be replaced by LF in [path].
The file will have its original line endings in your working directory.
Run Code Online (Sandbox Code Playgroud)
沿着这些方向,我还应该在跑完之后得到所有这些信息git commit -m "Initial commit"
吗?
create mode 100644 [path]
Run Code Online (Sandbox Code Playgroud)
如果这些都是正常的,有没有办法让git bash不那么冗长?
使用简单的喷油器与下面介绍的命令模式和这里所描述的查询模式.对于其中一个命令,我有2个处理程序实现.第一个是同步执行的"正常"实现:
public class SendEmailMessageHandler
: IHandleCommands<SendEmailMessageCommand>
{
public SendEmailMessageHandler(IProcessQueries queryProcessor
, ISendMail mailSender
, ICommandEntities entities
, IUnitOfWork unitOfWork
, ILogExceptions exceptionLogger)
{
// save constructor args to private readonly fields
}
public void Handle(SendEmailMessageCommand command)
{
var emailMessageEntity = GetThisFromQueryProcessor(command);
var mailMessage = ConvertEntityToMailMessage(emailMessageEntity);
_mailSender.Send(mailMessage);
emailMessageEntity.SentOnUtc = DateTime.UtcNow;
_entities.Update(emailMessageEntity);
_unitOfWork.SaveChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
另一个就像一个命令装饰器,但显式包装前一个类在一个单独的线程中执行命令:
public class SendAsyncEmailMessageHandler
: IHandleCommands<SendEmailMessageCommand>
{
public SendAsyncEmailMessageHandler(ISendMail mailSender,
ILogExceptions exceptionLogger)
{
// save constructor args to private readonly fields
}
public …
Run Code Online (Sandbox Code Playgroud) multithreading asynchronous dependency-injection entity-framework-4.1 simple-injector
有没有办法在将数据提交到远程方法之前以及从远程方法返回结果之后,在客户端上挂接MVC3不显眼的远程验证?
我试图告诉远程验证器仅在单击提交按钮时执行验证.正常行为是多次验证,例如在按键,模糊等过程中.这是不好的,因为有问题的验证方法需要调用非幂等操作.我需要确保只有在用户单击了提交按钮时才调用该方法.
如果我可以挂钩到before事件,我可以在表单中设置一个字段,将提交按钮标记为是否被点击.但是,在远程方法返回验证结果后,我需要重置此标志.
还有其他建议吗?这是用于使用ASP.NET成员资格提供程序的Membership.ValidateUser(string username, string password)
方法验证密码.FailedPasswordAttemtCount
每次发送无效密码时此方法都会递增,所以我不希望它在模糊,按键等期间执行.
asp.net-mvc jquery-validate unobtrusive-validation asp.net-mvc-3 remote-validation
假设我有一组3个单选按钮:
<div>
<label>
<input type="radio" name="Who" value="Myself"
checked="@isMyselfChecked" data-bind="checked: who" />
Mine
</label>
<label>
<input type="radio" name="Who" value="MemberId"
checked="@isMemberIdChecked" data-bind="checked: who" />
I know the member's ID
</label>
<label>
<input type="radio" name="Who" value="MemberUrl"
checked="@isMemberUrlChecked" data-bind="checked: who" />
I know the member's URL
</label>
</div>
Run Code Online (Sandbox Code Playgroud)
当用户选择第一个单选按钮(Mine/Myself)时,不需要额外的输入.但是,在选择第二或第三时,额外的输入是必需的:
<div>
<input type="text" name="MemberId" placeholder="Enter Member ID"
data-bind="toggleWho: who()" style="display: none" />
<input type="text" name="MemberUrl" placeholder="Enter Member URL"
data-bind="toggleWho: who()" style="display: none; width: 450px;" />
</div>
Run Code Online (Sandbox Code Playgroud)
只需拥有data-bind="visible: who() === '[MemberId|MemberUrl]'"
依赖文本框就足够了.但是,如果我想添加淡入/淡出过渡怎么办?
我尝试了 …
我知道异步方法的目的不是提高性能,但我发现 StackExchange.Redis 上的异步方法比同步方法花费的时间要长得多。
public static async Task<bool> GetScoresFromSetAsync(int score, string name)
{
string redisConnection = ConfigurationManager.AppSettings["RedisAccount"].ToString();
ConnectionMultiplexer connection = ConnectionMultiplexer.Connect(redisConnection);
IDatabase _cache = connection.GetDatabase();
List<string> scores = new List<string>();
var resultAsync = await _cache.SortedSetRangeByScoreAsync(name, score, score);
var result = _cache.SortedSetRangeByScore(name score, score);
return true;
}
Run Code Online (Sandbox Code Playgroud)
异步调用平均耗时约 5000 毫秒,而非异步调用平均耗时约 30 毫秒。我的 redis 托管在 azure 上。有什么想法吗?
编辑:我在这里谈论的是一个请求。SortedSetRangeByScore api 调用将在 30 毫秒内返回,而 SortedSetRangeByScoreAsync api 调用将在 5000 毫秒内返回。
我们设置了一个Web项目,将同一个项目部署到少数几个azure网站.部署到这些网站时,在调试模式下的部署按预期工作.但是,当尝试在发布模式下将同一项目部署到网站时,始终会提示我们输入密码.
尝试删除.pubxml和.pubxml.user文件,但问题仍然存在.为什么它会在调试模式下部署OK,但在Release模式下提示输入密码?
注意:大多数这些项目都部署到这些网站中标记为应用程序的虚拟目录.其他项目在发布和调试模式下部署得很好,它似乎只是我们遇到问题的一个项目.
从我对 OO 设计/模式/原则的所有阅读和研究中,我发现普遍的共识是松耦合(和高内聚)几乎总是更好的设计。我完全同意从我过去的软件项目经验中发言。
但是,假设某个特定的软件公司(我不在其中工作)有一些设计有问题的大型软件,可以与某些硬件进行交互。这些模块(我从未研究过)是如此紧密耦合,并且函数调用可以深入 20 多个级别来管理状态。类边界从来没有明确定义,用例也没有考虑清楚。一个优秀的软件开发人员(不是我)会提出这些问题,但只会被更高级的开发人员拒绝,因为开发实践(如 SOLID 或 TDD)并不真正适用,因为该软件已经使用“传统”方法运行多年,再改变也晚了。客户(我不知道他们是谁)最大的抱怨是产品质量。
由于上述不切实际的场景(我从来没有分开过),我想过是否存在首选甚至需要紧耦合的情况?什么情况下开发人员需要跨越模块边界并共享状态并增加依赖性并降低可测试性?有哪些系统如此复杂以至于需要这样做?我自己想不出一个好的案例,所以我希望一些更有经验的工匠可以帮助我。
谢谢。再说一遍,我不知道这家公司。
asp.net-mvc ×2
c# ×2
animation ×1
appharbor ×1
async-await ×1
asynchronous ×1
base64 ×1
coupling ×1
css3 ×1
decoupling ×1
deployment ×1
git ×1
jquery ×1
knockout-2.0 ×1
knockout.js ×1
linq ×1
oop ×1
private-key ×1
release ×1
validation ×1
webdeploy ×1