Tag: s#arp architecture

架构问题:我应该在哪个组件中放置哪个类,以获得干净的解决方案?

前言: 这是迄今为止我留在这里的最长的post……但我认为在这种情况下需要它。 很长一段时间我对这些事情都有疑问:如何命名程序集,以及如何在其中划分类。 我想在这里给出一个应用程序的例子,只有最少的类来演示我想要理解的内容。 想象一下这个应用程序 接受客户端消息,将它们存储在数据库中,然后将它们出列到MTA服务器。 它是一个Web应用程序,具有用于编写消息的ASP.NET接口+附加附件。 还有一个Silverlight客户端,因此webapp使用一个OperationContract(SaveMessage)公开ClientServices WCF ServiceContract。 还有一个Windows客户端……与Silerlight合同做同样的事情。 好。 这应该是一个虚假的场景来certificate我的无知。 以上将需要以下类: 信息 MessageAddress MessageAddressType(包含From,To的枚举) MessageAddressCollection MessageAttachment MessageAttachmentType MessageAttachmentCollection MessageException MessageAddressFormatException MessageExtensions(Message的静态扩展) MessageAddressExtensions(MessageAddress的静态扩展) MessageAttachmentExtensions(MessageAttachment的静态扩展) Project.Contract.dll 我将上述内容组织到正确的程序集中的第一步就是观察Message,MessageAddress,MessageAttachment,其属性所需的枚举(MessageAddressType,MessageAttachmentType)以及它们所需的集合(MessageAddressCollection,MessageAttachmentCollection)都将被标记为[DataContract]以便它们可以在WCF客户端和服务器之间进行序列化。 两者都很常见,我想我会将它们转移到一个名为Contract的中立共享程序集中。 Project.Client.dll 我需要服务器[ServiceContract]的客户端代理,它会引用Contract.dll中的类。 所以现在服务器,它也引用Project.Contract.dll现在可以保存从WCF客户端收到的序列化消息,并将它们保存到数据库中。 插件 接下来我会意识到我希望通过第三方插件(例如,病毒检查程序)将这些对象处理为服务器端… 但是插件应该只读取(仅)访问变量以检查变量,如果他们看到他们不喜欢的东西就抛出错误。 所以我会考虑回到从IMessageReadOnlyinheritanceMessage …但是在哪里放置那个接口? Project.Interfaces.dll 如果我把它放在一个名为Project.Interfaces.dll的程序集中,这对于可以引用它但没有引用Contracts.dll的插件有效…但是现在客户端必须引用Contracts程序集和接口……听起来不是一个好方向…… 重复对象 或者,我可以有两个Messages结构(并复制其他MessageAttachment等类)…一个用于从客户端到服务器(在Contracts.dll中)进行通信,然后使用第二个ServerMessage / ServerMessageAddress / ServerMessageAddressCollection服务器端,inheritance自IMessageReadOnly,然后看起来我更接近我想要的。 对于重复的对象,插件的访问受限,而Server BL等具有与其工作相关的类型的完全访问权限,而客户端具有不同但相同的对象……实际上……我们应该开始考虑它们由于不相同,我的头脑中更清楚的是对象就在那里与客户交谈,即合同/通信对象)…… 网站用户界面 如果有两个不同的消息,它们现在有不同的属性……哪一个最适合用于支持ASP.NET表单? ServerMessage对象看起来最快(类型之间没有映射)…但是所有逻辑都已经针对客户端消息对象(具有不同的属性和内部逻辑)进行了解决。 那么我是否会使用ClientMessage,并将其映射到Servermessage,以便在不同的介质中保持各种UI逻辑相同? 或者我应该更喜欢映射,只是重写UIvalidation? 那么第三种情况,Silverlight …… Contracts程序集是一个完整框架程序集…… […]

S#arp架构

有人可以与s#arp架构分享他们的经验。 我们决定遵循该项目的mvp模式。 这可以吗? 项目规模中等。 我们将遵循tdd和ddd。 任何人都可以解释如何使用这种架构意味着解释层。 我们没有足够的时间来完成整个文档。 如果有人用简短的例子来表达粒子。 请帮帮我!!! 谢谢,米林德

如何实现历史版本控制?

我们正处于构建SQL 2008 R2上的大型C#MVC2应用程序(我们还将Sharp架构和Nhibernate作为生态系统的一部分)的早期阶段,其中一个要求是所有数据库行版本都可以在给定的时间内访问历史。 我们玩弄了类似于以下布局的想法: id(PK) 的recordId VERSIONID 并且使用相同的recordId和增加的versionId创建新记录中的每个编辑记录结果。 然后记录显示将按照SELECT … WHERE recordId = X AND versionId = MAX(versionId)的内容完成。 每个事务的快照都不起作用(太多了?并且无法从应用程序中轻松访问)。 但我们很好奇其他实施方案是否成功,或者我们的提案存在潜在问题。

WCF / S#arpArch:在请求中的第一次调用之后,底层ISession将关闭

我知道在SA中使用WCF已被弃用,因为它将转移到SA Contrib。 但是直到它有,我想我必须使用SA中的支持。 也就是说,我在调用WCF服务后关闭了底层的NHibernate会话。 我的存储库的DbContext.Session在第一次调用后关闭,因此在单个HTTP请求期间我不能多次调用我的服务。 我基于Northwind示例应用程序在我的项目中设置了WCF。 该示例仅在每个请求中调用一次WCF服务,因此此问题不会显示在那里。 但是,通过复制TerritoriesController中的以下行,可以轻松复制该问题: territories = territoriesWcfService.GetTerritories(); 这会抛出一个ObjectDisposedException:“Session is closed!Object name:’ISession’”。 有任何想法吗?