使用每种技术的优缺点是什么?
WCF Web Api现已合并到Asp.net Asp.net web api现在支持自托管.
我仍然想象如果我想为相同的操作公开多个协议模式,我仍然倾向于WCF,或者Mvc端点也可以这样做吗?
新的Asp.Net web api也暴露了Wsdl吗?如果不是,客户如何找出他们可以使用的操作?
可以说,Mvc的最佳特性是模型绑定器.WCF的等效性有多强?
那么有人能告诉我Asp.net web api带来哪些优势?WCF似乎绝对是更强大/可扩展的选择,imo.关于Mvc Web Api对WCF模型的唯一要求可能是易于开发,但这意味着如果它最终成为严重的设计限制则蹲下.
假设我有以下实体(类)
public class Target
{
public string Value;
}
public class Source
{
public string Value1;
public string Value2;
}
Run Code Online (Sandbox Code Playgroud)
现在我想配置自动映射,如果Value1以"A"开头,则将Value1映射到Value,否则我想将Value2映射到Value.
这是我到目前为止:
Mapper
.CreateMap<Source,Target>()
.ForMember(t => t.Value,
o =>
{
o.Condition(s =>
s.Value1.StartsWith("A"));
o.MapFrom(s => s.Value1);
<<***But then how do I supply the negative clause!?***>>
})
Run Code Online (Sandbox Code Playgroud)
然而,我仍然不知道的部分是如果在早期条件失败时告诉AutoMapper 采取s.Value2
措施.
在我看来,API的设计并不像它可能......但可能是我缺乏知识妨碍了.
鉴于以下3种方式加入
select t1.* from t1
left join t2 on t1.fk = t2.pk
join t3 on t2.fk = t3.pk
Run Code Online (Sandbox Code Playgroud)
如果t2和t3之间的连接失败,那么是否会返回t1和t2之间成功连接的行?如果操作顺序从左到右,我假设没有,但是如果它从右到左进行评估(t3首先连接到t2),那么即使前者失败,t1仍然会被返回.
它是如何工作的?
Martin Fowler认为Anemic Domain Model是一种反模式.
由于Object Relational Impedence Missmatch,将持久性模型作为域模型滚动似乎也很严重.对于持久性和规范化的问题,我们倾向于将类分解为非常小的小块,在这些类之上打字方法是愚蠢的.加上持久性很少发生变化,但业务逻辑变化很大.
所以我们需要一个基于持久性模型构建的DomainModel(而不是同一个).然后,此域模型将包含业务逻辑属性和方法.
但是现在这些领域模型仍然落后于服务,为了将它们暴露给外部世界,我们需要将它们转换为DTO.
我们在这里做的是manny mappings.
它不会在那里结束,因为DTO可能需要映射到ViewModel.
所有这些以及重复验证逻辑的问题仍然没有消失,因为客户需要实时验证.ViewModel对验证一无所知,因此在SPA中,您不得不在客户端(通常使用javascript)再次重写验证逻辑.
服务本质上是无状态的(消息或面向RPC),所以我们在Persistence,OO之间进行所有这些映射,然后返回到Procedural,有什么好处?您如何证明大多数IT预算的实际成本?
我知道如何拥有完整的DDD,使用Aggregate Roots,Domain Models等会很"酷",但你怎么能证明成本和开发效率的打击?
反模式(或反模式)是社交或商业运营或软件工程中使用的模式,可能是常用但在实践中无效和/或适得其反
如果是这样,DDD和Rich Domain Model不会适合上面的反模式定义而不是"精益"域模型.对不起,我鄙视加载的单词"Anemic".
通过保持域模型,"精益"你实际上允许它被共享而不违反"抽象依赖原则","不要重复自己"以及将一个数据载体映射到另一个数据载体的耗时,繁琐且容易出错的过程,以及除此之外的任何相关单元测试(除非您考虑使用单元测试进行映射并希望获得最佳效果).
architecture design-patterns domain-driven-design anti-patterns
装配GetTypes()
在幕后做什么?假设已经加载了一个程序集AppDomain
,它还需要从物理DLL中读取吗?汇编清单的作用是什么?
通过这样的程序集迭代:
AppDomain.CurrentDomain.GetAssemblies().SelectMany(a => a.GetTypes())
Run Code Online (Sandbox Code Playgroud)
我偶尔会收到以下错误:
Could not load file or assembly
Run Code Online (Sandbox Code Playgroud)
这告诉我,因为一个程序集被加载到AppDomain
它不一定完全加载到内存.有时它仍然需要返回文件.
我的问题:
我们使用Crm 2011作为我们的持久层,我们注意到了糟糕的性能.
我们看起来并且看到有索引,但索引是实体中所有列的组合(差不多).这使得它在所有意图和目的上几乎无用.
那么我该如何加快速度呢?我可以去数据库并手动添加一个索引,但是如果可能的话,我希望通过适当的渠道以及将来的可维护性.我已经转移了Bing和Google以及Stackoverflow,但我找不到有关此基本功能的任何信息.
请帮忙.
使用Visual Studio和TFS,最好是Specflow或标准单元测试.
我希望开发人员在签入之前将所有单元测试作为策略运行.如果单元测试中断,则vS应该阻止他们检入,就像在合并冲突中运行一样.
我知道有可以执行此操作的后期构建脚本,但实际上如果单元测试中断,我宁愿它根本不进入源代码控制.另外,等待完整构建的转变相当缓慢.然后是那些打破谁的东西的争吵.
所以不,我希望在办理登机手续之前将本地考试通过.我该怎么做?是的,他们可以点击按钮,但我喜欢让他们比这更"激励".
怎么修?
我有2个第三方程序集,它们使用NewtonSoftJson.dll.捕获的是其中一个使用较旧的3.xx而另一个使用4.5.x. 所以在运行时,两个组件中至少有一个抱怨另一个.
我该如何解决这个问题?我可以设置服务,但代码和环境目前没有这样设置.在给定的时间内,它也可以安全地完成重构.
有没有办法在设计时进行预编译反射?
我的意图是使用T4基于实现某些接口的类来吐出自定义代码.我知道我可以调用反射,但我希望T4脚本在编译之前吐出额外的代码,否则我需要编译代码两次,一次生成dll,两次让T4反映先前生成的dll并添加额外的脚手架.
有没有办法在设计时做反思?
有一个更好的方法吗?
有没有办法通过"GET"查询web api,但是参数中有复杂的对象?
到目前为止我看到的所有例子似乎都表明我必须使用"POST".但我不想使用"POST",因为这是一个查询,同时我不想要一个带有16个参数的函数,因为它只是尖叫脆弱.
public Product Get(int id, string name, DateTime createdBy, string stockNumber, ... )
{
...
}
Run Code Online (Sandbox Code Playgroud)
我希望将上述内容转化为:
public Product Get(ProductQuery query)
{
...
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?你如何使HttpClient与上述服务一起工作.
c# ×4
.net ×3
reflection ×2
architecture ×1
asp.net ×1
automapper ×1
automapper-2 ×1
bdd ×1
design-time ×1
dll ×1
indexing ×1
join ×1
lambda ×1
left-join ×1
rest ×1
sql ×1
sql-server ×1
t-sql ×1
t4 ×1
tdd ×1
unit-testing ×1
wcf ×1
xrm ×1