- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
前言:
这是到目前为止我在这里留下的最长的帖子...但是在这种情况下,我认为这是必需的。
很长一段时间以来,我一直对这些事情有疑问:如何命名程序集,以及如何在它们中划分类。
我想在这里举一个应用程序的例子,只用最少的类来演示我要理解的内容。
想象一个应用程序
接受客户端消息,将它们存储在数据库中,然后在以后将它们从MTA服务器中出队。
这是一个Web应用程序,具有一个ASP.NET接口来编写消息和附加附件。
还有一个Silverlight客户端,因此该Web应用程序公开了带有一个OperationContract(SaveMessage)的ClientServices WCF ServiceContract。
还有一个Windows客户端...与Silerlight合同具有相同的功能。
好。这足以证明我的无知。
上面将需要以下类:
信息
留言地址
MessageAddressType(带有From,To的枚举)
MessageAddressCollection
邮件附件
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客户端收到的序列化消息,并将其保存到db中。
外挂程式
接下来,我意识到我希望由第三方插件(例如,病毒检查程序)在服务器端处理这些对象...
但是,插件应该(仅)具有对变量的只读访问权限,以便检查变量,并在看到不喜欢的内容时抛出错误。
因此,我想考虑回过头来从IMessageReadOnly继承Message ...但是将该接口放在哪里?
Project.Interfaces.dll
如果我将其放在一个名为Project.Interfaces.dll的程序集中,这将适用于那些无需引用Contracts.dll即可引用该程序的插件...但是现在客户端必须同时引用Contracts程序集和接口...听起来不是一个好的方向...
复制物件
或者,我可以有两个Messages结构(并也复制其他MessageAttachment等类)...一个用于从客户端到服务器进行通信(在Contracts.dll中),然后使用第二个ServerMessage / ServerMessageAddress / ServerMessageAddressCollection服务器端,它继承自IMessageReadOnly,然后看来我离我想要的东西更近了。
使用重复的对象,插件的访问受到限制,而Server BL等具有与其工作相关的类型的完全访问权限,而客户端拥有不同但相同的对象。
实际上...他们可能应该开始将它们视为不完全相同,这使我脑海中更加清楚,这些对象正与客户对话(即Contract / Comm对象)。
网站界面
如果出现两个不同的消息,并且它们现在具有不同的属性,则会弹出……嗡嗡声……最适合用来支持ASP.NET表单的属性是哪一个? ServerMessage对象似乎最快(类型之间没有映射关系)...但是所有逻辑已经针对客户端消息对象(具有不同的属性和内部逻辑)进行了计算。因此,我是否会使用ClientMessage并将其映射到Servermessage,以在不同媒介之间保持各种UI逻辑相同?还是我更喜欢映射,而只是重写UI验证?
第三种情况,Silverlight ... Contracts程序集是一个Full Framework程序集... Silverlight无法引用(不同的框架/构建机制)....所以我在Silverlight端拥有的程序集可能是完全相同的代码,但必须是不同的程序集。如何解决?
到底应该考虑什么作为DataContract?
最后...这是我发誓,在我巨大的问题即将结束时...关于那些显然不是DataContract的令人讨厌的额外类呢?
例如,MessageAddress是一个DataContract。好。它公开的枚举是它的一部分...很有道理...但是,如果messageAddress构造函数引发了MessageAddressFormatException ...是否将其视为DataContract的一部分?
服务器,客户端和AND插件都可以有共同的类吗?
还是这是ServerMessageAddress和ClientMessageAddress都共有的例外,因此不应重复,而应放在Common程序集中……以便最终,客户必须绑定到Contracts AND Common? (难道我们不只是通过Interfaces组件走这条小巷吗?)
普通的基类/接口呢?
这些异常是否应该具有通用的基类?例如... ClientMessageAddressException,ServerMessageAddressException,ServerMessageVirusException(来自插件)...我应该努力使它们尽可能(最好)全部从抽象MessageException派生...还是有一段时间进行继承/重用只是不再要争取一个适当的目标?
非常感谢您阅读本书。
我是一名开发人员,在技术方面,我可以继续前进...但是这些问题,我不得不在其中布置组件,体系结构,我自己,让我非常困惑...让我迷惑我花了很多时间,当我开车兜风时,将东西从一个装配移动到另一个装配,以查看哪一个是最合适的,同时还不确定我在做什么,并且试图不获取循环引用...
所以-真的-感谢您的聆听,我希望能被那些能够描述如何清晰地布置上述内容的人读到,希望也能表达出对未来项目的思考方式。
最佳答案
在花了10分钟编辑格式化问题之后,我仍然会否决它。我无法阅读所有内容。
去拿一份
Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries (2nd Edition)
关于c# - 体系结构问题:干净的解决方案应该放在哪个类的哪个类中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1147343/
我当前项目中的许多类都有几个只能从类本身内部调用的属性和方法。此外,根据类(class)的当前状态,它们可能会扰乱类(class)的工作。 目前,所有这些接口(interface)都在 .h 文件的主
我想使用ngbTabSet将nav-pills in card-header 和tab-content in card-body。但我不知道该怎么做。 这是我尝试实现的示例(使用 bootstrap.
我正在浏览文档以查找如何允许放置在停靠栏图标上。据我所知,建议您使用 LSItemContentTypes,因为 CFBundleTypeOSTypes 已弃用。但是,我无法让 LSItemConte
我正在尝试在书签中使用 jquery UI 作为 slider 。并且 jquery ui 要求在普通 jquery 文件之后包含该文件。 所以到目前为止我所尝试的只是将脚本附加到 header ,同
您好,我尝试了广泛的谷歌搜索,但似乎没有任何帮助。 这是我的场景: 公司 Logo 存储在外部域/网址(矩形)中。 带有谷歌地图的 Ionic 应用程序,将这些 Logo 作为标记放置在 map 上。
我今天在阅读我的一些 C# 代码时发现了这一行: if (ProgenyList.ItemContainerGenerator.Status != System.Windows.Controls.Pr
我刚遇到this question在 Go FAQ 中,它让我想起了困扰我一段时间的事情。不幸的是,我真的不明白答案是什么。 似乎几乎所有非 C 类语言都将类型放在变量名之后,如下所示: var :
这是有效的 HTML 吗? 最佳答案 作为元素可以包含 phrasing content ,以及属于该组,则有效。 从语义上(并且具有一些常识),如果唯一的内容是 , 不;如果它同时包含文本和图像
这是有效的 HTML 吗? 最佳答案 作为元素可以包含 phrasing content ,以及属于该组,则有效。 从语义上(并且具有一些常识),如果唯一的内容是 , 不;如果它同时包含文本和图像
我有两本 T.Parr 写的关于 ANTLR 的书,我到处都看到美元符号和符号的引用。它也对我有用: term : IDENT -> { new TokenNode($IDENT) }; 或更复杂的东
我在实现段控制时遇到了一些问题。因为我希望它是一个固定的标题,所以当我滚动时我总是可以看到它,我已经在 - (UIView *)tableView:(UITableView *)tableView v
我有一个 20x36px (10x18pt) 的箭头图像,当我选择一个 UIImageView 时,将它拖到我的 View Controller 上然后设置图像,它总是模糊的。我只在我的项目中包含 @
How can I put background image when I hover a link Insert Bg in this a when hov
我需要在我的 .container 中添加(最新的第一个)新分区,但在 .controls (按钮)之后。可能吗? 注意:添加新的分区来保存按钮下方的前置控件对我来说不是一个选择。 HTML 需要保持
我是一名优秀的程序员,十分优秀!