假设我们有一个充当中间人的应用程序,允许A公司向其客户发送报告.
公司A - >公司B(我) - >公司A的客户
收到报告后,我们会向收件人发送电子邮件通知,但这些通知必须来自我们公司的通知电子邮件地址,例如
joe.bloggs@a.com - > notifications@b.com - > peter@c.com
现在,客户倾向于回复这些电子邮件通知,希望他们回到在A公司发送报告的人.相反,他们最终回到我们的地址notifications@b.com.
一个简单的解决方案可能是更改我们发送到相关公司A地址的通知的回复标题,例如
joe.bloggs@a.com - > notifications@b.com [回复:joe.bloggs@a.com] - > peter@c.com
但我主要担心的是:
这些问题是否始终存在?或者,我应该有其他问题吗?
我有一种心理tic,这让我不愿意在C和C++等低级语言中使用大型库(如GLib或Boost).在我看来,我认为:
嗯,这个图书馆有数千个小时的时间,而且它是由那些比我更了解语言的人创造的.他们的作者和粉丝说这些库是快速可靠的,而且功能看起来非常有用,它肯定会阻止我(严重地)重新发明轮子.
该死的,我永远不会使用该库中的所有功能.它太大了,多年来可能会变得臃肿; 这是我的程序需要拖延的另一个球和链.
该托沃兹咆哮(争议虽然它是)不完全把我的心脏放心无论是.
我的想法有什么依据,还是我只是不合理和/或无知?即使我只使用大型库的一个或两个功能,通过链接到该库我会产生运行时性能开销吗?
我确信它还取决于具体的库是什么,但我通常很想知道大型库是否会在技术层面上固有地引入低效率.
当我没有技术知识知道我是否正确的时候,我已经厌倦了对此的痴迷,嘀咕和担心.
请把我从痛苦中解救出来!
我正在创建一个MVC网站,并打算创建一个Web API,以便在网站内使用,也可能由第三方使用.
从MVC控制器,我将调用一个服务层,它将包含业务逻辑,作用于域模型,执行验证,进行基础设施外部服务调用等.服务层反过来将调用存储库以进行任何数据库交互.
现在,我喜欢ServiceStack的外观,并打算将它用于Web API - 它似乎比ASP.NET MVC 4 Web API更成熟.我的问题是,我应该在上面的服务层中调用ServiceStack API,类似于MVC控制器,还是应该将其作为服务层,为Web客户端和MVC控制器提供服务?
我们开始了一个新的项目推出了很多我们不那么熟悉的新技术,而我们没有大量的练习中的架构.换句话说,接口和服务类的东西,我们的"等等之间的相互作用由于内部和客户的反馈,重建是相当不稳定的,更是如此.虽然我一直在不断移动的规范沮丧,我认为这在一定程度上建立的东西,我们以前从来没有建的必要组成部分 - 如果我们只是坚持原来的设计和范围,最终产品可能会是比它成为一个创新和有用的要少得多.
我还介绍了测试驱动开发(TDD),因为它的好处已有详细记录,从概念上讲我喜欢这个想法.还有两个要学习的新东西--NUnit和嘲弄 - 但是看到所有那些绿色圆圈使得这一切都值得.
然而,随着时间的推移,那些不断变化的设计似乎意味着我花了很多时间来改变我的测试,而不是编写代码本身.仅仅因为这个原因,我已经回到了旧的测试方式 - 也就是说,不是自动化的.
虽然我毫不怀疑这个应用程序在数百个优秀的单元测试中会更加强大,但我发现推出该产品的时间权衡是不可接受的.我的问题是,那么 - 你们是否还发现如果你正在构建一个测试版/建立测试版,那么TDD会很麻烦?TDD是否更加自然地与规范更加固定的东西,或者开发人员在语言和技术方面拥有更多经验的东西相提并论?或者我做过一些根本错误的事情?
请注意,我并不想在这里批评TDD - 只是我不确定它总是最适合所有情况.
我可以在NHibernate中进行嵌套事务,我该如何实现它们?我正在使用SQL Server 2008,所以支持肯定在DBMS中.
我发现如果我尝试这样的事情:
using (var outerTX = UnitOfWork.Current.BeginTransaction())
{
using (var nestedTX = UnitOfWork.Current.BeginTransaction())
{
... do stuff
nestedTX.Commit();
}
outerTX.Commit();
}
Run Code Online (Sandbox Code Playgroud)
然后到outerTX.Commit()
事务处理变为非活动状态时,会在会话AdoTransaction上产生ObjectDisposedException.
因此我们应该创建嵌套的NHibernate会话吗?或者是否有其他类我们应该使用它来包装事务(我听说过TransactionScope,但我不确定那是什么)?
我现在正在使用Ayende的UnitOfWork实现(感谢Sneal).
原谅这个问题的任何天真,我还是NHibernate的新手.
谢谢!
编辑:我发现你可以使用TransactionScope,例如:
using (var transactionScope = new TransactionScope())
{
using (var tx = UnitOfWork.Current.BeginTransaction())
{
... do stuff
tx.Commit();
}
using (var tx = UnitOfWork.Current.BeginTransaction())
{
... do stuff
tx.Commit();
}
transactionScope.Commit();
}
Run Code Online (Sandbox Code Playgroud)
但是我对此并不是很兴奋,因为它锁定了我们使用SQL Server,而且我发现如果数据库是远程的,那么你必须担心启用MSDTC ...还有一个组件要去错误.嵌套事务在SQL中是如此有用和容易,我认为NHibernate可以通过某种方式模拟相同的...
在过去,我在查询varbinary(max)列时注意到了糟糕的性能.可以理解,但在检查它是否为空时似乎也会发生,我希望引擎会改为采取一些快捷方式.
select top 100 * from Files where Content is null
Run Code Online (Sandbox Code Playgroud)
我怀疑它很慢,因为它是
这个问题似乎不同意我这里缓慢的前提,但我似乎一次又一次地遇到二进制字段的性能问题.
我想到的一个可能的解决方案是创建一个被索引的计算列:
alter table Files
add ContentLength as ISNULL(DATALENGTH(Content),0) persisted
CREATE NONCLUSTERED INDEX [IX_Files_ContentLength] ON [dbo].[Files]
(
[ContentLength] ASC
)
select top 100 * from Files where ContentLength = 0
Run Code Online (Sandbox Code Playgroud)
这是一个有效的策略吗?当涉及二进制字段时,有哪些其他方法可以有效地进行查询?
是否有一些明智的方法来使用强类型简单类型和属性的元素?
好的,我有一个XSD架构,它有一百万(呃,一百)个元素,可能如下所示:
<xsd:element name="DocumentDescription" type="xsd:string" />
<xsd:element name="DocumentDateTime" type="xsd:dateTime" />
<xsd:element name="DocumentSize" type="xsd:int" />
Run Code Online (Sandbox Code Playgroud)
那是花花公子.但是,我真的希望所有这些元素在它们上面也有一些共同的属性,例如,"format"和"isVisible".即具有如下架构:
<DocumentDescription isVisible="true">doc description</DocumentDescription>
<DocumentDateTime format="dd/mm/yyyy" isVisible="true">1/1/2008</DocumentDescription>
<DocumentSize format="0.00 KB" isVisible="false">5403</DocumentSize>
Run Code Online (Sandbox Code Playgroud)
我可以通过在生成它时将所有这些属性添加到XSD来手动完成,并且非常可怕,如下所示:
<xsd:element name="DocumentDescription" />
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="format" type="xsd:string" />
<xsd:attribute name="isVisible" type="xsd:boolean" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:element name="DocumentDateTime" />
... etc
Run Code Online (Sandbox Code Playgroud)
...但在理想世界中,我宁愿将其定义为complexType:
<xsd:complexType name="customType">
<xsd:complexContent>
<xsd:extension base="???">
<xsd:attribute name="format" type="xsd:string" />
<xsd:attribute name="isVisible" type="xsd:boolean" />
Run Code Online (Sandbox Code Playgroud)
......这意味着我可以这样做:
<xsd:element name="DocumentDescription" type="customType" baseType="xsd:string" />
<xsd:element name="DocumentDateTime" type="customType" baseType="xsd:dateTime" />
<xsd:element name="DocumentSize" type="customType" baseType="xsd:int" />
Run Code Online (Sandbox Code Playgroud)
我的"理想世界"代码的问题是: …
我们公司在VB6中有一个很大的代码库,我们目前使用VSS,尽管我们讨厌它,但它至少集成到了VB6 IDE中.
我自己的团队,正在使用.NET,现在正在寻找替代的SCM,比如我个人最喜欢的Git.使用Git Extensions,我们似乎能够很好地将Git命令集成到Visual Studio IDE中.
但是,有人问过这个问题:Git也可以用于我们的VB6代码库吗?
当然我假设文件本身在git存储库中可以正常工作,但毫无疑问,开发人员会抱怨他们是否必须使用命令行来完成所有源代码控制.但有没有人有使用VB6和Git的经验?VB6 IDE中可以进行任何集成吗?或者,没有IDE集成可能没那么麻烦?
我是否会获得第一个创建[ vb6 ]和[ git ] 的荒谬标签组合的徽章?
让我的小行星克隆(在C中)我宁愿爱上基于矢量的实体,但我只是将它们编码为x,y点数组.对于像小行星这样的东西来说这很好,但如果我想制作更复杂的2D模型,我该怎么办?
我注意到有很多3D建模软件,以及大量的教程和帮助将3D模型导入到一个用于Open GL的C/C++程序中.
然而,我对创建基于2D矢量的模型比3D更感兴趣,因为我很高兴继续尝试2D游戏.是否存在2D建模这样的概念?是否有专门用于创建和导出2D模型和库以便导入2D模型的工具,或者只是在3D软件中创建平面模型然后导入这些文件(例如.3ds,.ms3d)并将它们平放在z轴上?
到目前为止,我唯一的想法是使用像Inkscape这样的东西进行建模,生成SVG文件,然后使用Cairo导入和渲染它们.这会运作得好,还是有其他建议?
注意我对任何类型的建模都有点新手,所以我可能会问一个愚蠢的问题......
我有一个存储库类,它定义了一些基本的Get/Save/Delete方法.在这些内部,我使用NHibernate来完成我的业务实体的工作.例如:
Public Class SecurityRepositoryNHibImpl : Implements ISecurityRepository
Public Function GetUser(ByVal UUID As System.Guid) As Entities.User Implements ISecurityRepository.GetUser
Dim eUser As Entities.User
Using session As ISession = NHibernateHelper.OpenSession()
eUser = session.Get(Of Entities.User)(UUID)
End Using
Return eUser
End Function
End Class
Run Code Online (Sandbox Code Playgroud)
但是,在我的User类中,我有一些属性和其他对象的集合,理想情况下我想要延迟加载.但是当然,ISession是在存储库中创建和处理的,我想这就是为什么,除此之外,当我尝试访问这些属性时,我得到一个"无法初始化代理 - 没有会话"错误.
我唯一的选择是在使用存储库时禁用延迟加载吗?或者是否可能(或者只是愚蠢)以某种方式将会话纳入业务层的范围?
我确实喜欢这个存储库模型,并且NHibernate在我身上不断增长(在经历了许多最初的挫折之后试图让它工作),那么大师们一起使用它们的最佳方式是什么?
我对NHibernate和存储库模型一般都很陌生(在工作中我们仍然主要使用VB6!),所以原谅可能是一个愚蠢的问题.谢谢.
@mookid:谢谢老兄,这真的很有帮助,但我可能会把它打开一段时间.它是WCF Web服务的后端,所有功能都是每个呼叫的上下文,因此每个呼叫的会话寿命都会很好.只是不确定如何在业务层中使用这样的东西,理想情况下我不希望业务对象必须直接与任何NHibernate类接口.我猜NHibernate会话的某种包装器至少将它抽象出来......嗯,你至少让我走上了正确的轨道.
看起来这里的关键词是"工作单元",网上存在大量与NHibernate相关的资源.特别是寻找Ayende在Rhino Commons中的实现,以及他的App Architecture网络演员(Hibernating Rhinos的第9号),非常有用.我最初感到困惑,因为我虽然在业务层中设置了"工作单元",但是我很快就纠正了.
c ×2
c++ ×2
nhibernate ×2
performance ×2
sql-server ×2
2d ×1
asp.net-mvc ×1
binary ×1
boost ×1
dvcs ×1
email ×1
excel ×1
git ×1
glib ×1
nested ×1
nunit ×1
phishing ×1
repository ×1
servicestack ×1
session ×1
spam ×1
sql ×1
tdd ×1
testing ×1
transactions ×1
unit-testing ×1
varbinary ×1
vb.net ×1
vb6 ×1
xml ×1
xsd ×1