问题标签 [architecture]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 如何公开集合属性?
每次我创建一个具有集合属性的对象时,我都会来回寻找最好的方法?
- 带有返回私有变量引用的 getter 的公共属性
- 显式的 get_ObjList 和 set_ObjList 方法,每次都返回并创建新的或克隆的对象
- 返回 IEnumerator 的显式 get_ObjList 和采用 IEnumerator 的 set_ObjList
如果集合是一个数组(即 objList.Clone())与一个列表,它会有所不同吗?
如果将实际集合作为引用返回是如此糟糕,因为它会创建依赖项,那么为什么要返回任何属性作为引用呢?每当您将子对象公开为引用时,除非子对象具有属性更改事件,否则可以在父对象“不知道”的情况下更改该子对象的内部结构。有内存泄漏的风险吗?
而且,选项 2 和 3 不会破坏序列化吗?这是一个问题 22,还是您必须在拥有集合属性的任何时候实现自定义序列化?
通用的 ReadOnlyCollection 似乎是一般用途的一个不错的折衷方案。它包装了一个 IList 并限制对它的访问。也许这有助于内存泄漏和序列化。但是它仍然存在枚举问题
也许这取决于。如果您不关心集合是否被修改,那么只需将其公开为每个#1 的私有变量上的公共访问器。如果您不希望其他程序修改集合,那么 #2 和/或 #3 会更好。
问题中隐含的是为什么要使用一种方法而不是另一种方法,以及对安全性、内存、序列化等的影响是什么?
networking - 桥接到 XMPP 的最佳架构是什么?
如果我有一个单独的系统,它有自己的用户和存在概念,那么创建到 XMPP 服务器网络的桥接的最合适的架构是什么?据我所知,主要有以下三种方式:
充当服务器。这会创建一个接触点,但我担心它会对兼容性产生影响,并且可能会在我的系统中增加用于模拟服务器的复杂性。
充当客户。这似乎意味着我的系统中的每个用户都需要一个连接,而这并不能很好地扩展。
我听说过 XMPP 网关协议,但不清楚这是否比客户端解决方案更好。我也无法判断这是否是标准的。
任何建议或权衡将不胜感激。例如,这些解决方案中的任何一个是否都需要在目标 XMPP 服务器内运行代码(这不太可能是我能做的)。
database - 数据库异常处理最佳实践
您如何处理应用程序中的数据库异常?
您是在将数据传递给 DB 之前尝试验证数据还是仅仅依赖 DB 模式验证逻辑?
您是否尝试从某种数据库错误(例如超时)中恢复?
以下是一些方法:
- 在将数据传递给数据库之前验证数据
- 将验证留给 DB 并正确处理 DB 异常
- 验证双方
- 验证业务逻辑中一些明显的约束,并将复杂的验证留给 DB
你用什么方法?为什么?
更新:
我很高兴看到越来越多的讨论。
让我们尝试总结社区的答案。
建议:
- 验证双方
- 检查客户端的业务逻辑约束,让 DB从 hamishmcn进行完整性检查
- 尽早检查以避免ajmastrean打扰 DB
- 尽早检查以改善Will的用户体验
- 保留数据库交互代码以简化hamishmcn的开发
- 对象关系映射(NHibernate、Linq 等)可以帮助您处理来自 ajmastrean的约束
- Seb Nilsson出于安全原因需要客户端验证
你还有什么要说的吗?这将转换为验证特定问题。我们缺少核心,即“与数据库相关的错误最佳实践”,哪些要处理,哪些要冒泡?
database - 交易最佳实践
您对数据库事务的依赖程度如何?
您喜欢小交易范围还是大交易范围?
您是否更喜欢客户端事务处理(例如 .NET 中的 TransactionScope)而不是服务器端事务,反之亦然?
嵌套事务呢?
你有一些与交易有关的提示和技巧吗?
您在使用事务时遇到的任何问题?
欢迎各种答案。
java - 将现有凌乱的 web 应用程序迁移到优雅的 MVC 的最佳方法是什么?
大约一个月前,我加入了一家新公司。该公司规模较小,具有很强的“初创”感。我在一个由 3 人组成的团队中担任 Java 开发人员。该公司主要向企业/商业类型的人出售服务,用于相互交流。
我过去和将来要做的主要事情之一是公司的主要网站 - 从中出售服务,现有用户登录以检查他们的服务并支付账单,新用户可以注册试用等。目前这是一个部署在 Tomcat 上的 JSP 应用程序,可以通过公司自己编写的持久层访问数据库。
我在这里遇到的反复和日益增长的挫败感(而且我对这份工作总体上很满意,所以这不是“哦,不,我不喜欢我的工作”之类的帖子)是缺乏任何更大的设计或此 Web 应用程序的体系结构。该应用程序由几十个 JSP 页面组成,几乎不存在 Servlet 或 Beans 或任何其他类型的框架中的逻辑。许多 JSP 页面是数千行代码,它们jsp:include
是其他 JSP 页面,业务逻辑与 HTML 混合在一起,经常使用的代码片段(例如获取 Web 服务连接)被剪切和粘贴而不是重用等。换句话说,应用程序是一团糟。
公司内部一直在尝试重新设计该站点以使其更适合 MVC。我认为开发人员和高层开始意识到这种当前的意大利面条式代码模式是不可持续的,或者很容易扩展为用户添加更多功能。高层和开发人员对完全重写东西持谨慎态度(有充分的理由,因为这意味着重写现有功能需要数周或数月的工作),但我们已经讨论过(慢慢地)重新编写将网站的某些区域写入新框架。
使应用程序和代码库向这个方向移动的最佳策略是什么?作为一名开发人员,我如何才能真正帮助快速推进这项工作,而不是看起来像一个刚入职并告诉所有人他们写的东西都是废话的混蛋?当您遇到此类事情时,您在自己的工作经历中是否使用过任何经过验证的策略或经验?
.net - 以服务器为中心与以客户端为中心的架构
对于典型的业务应用程序,是否应该将重点放在通过 AJAX 进行客户端处理上,即从服务器中提取数据并在客户端上进行处理,或者您是否建议使用更经典的 ASP.Net 方法,服务器负责处理大部分 UI事件?我发现很难想出一个好的“默认架构”来开始。也许有人有一个他们可以推荐的开源示例应用程序。
c# - 您将如何在 C# 3.0 中构建桌面应用程序
我在 C# 3.0 中创建了一个简单的桌面应用程序来学习一些 C#、wpf 和 .Net 3.5。我的应用程序本质上是从 csv 文件中读取数据并将其存储在 SQL Server CE 数据库中。我使用 sqlmetal 为数据库生成 ORM 代码。我对这个应用程序的第一次迭代非常丑陋,我正在重构它。
这让我想到了我的问题。您将如何在 C# 中构建桌面数据库应用程序?最佳实践是什么?
您是否创建了使用 sqlmetal 生成的代码的数据库抽象层 (DAL)?或者生成的代码是否足够抽象?
如果您使用 DAL 模式,您会将其设为单例还是静态成员?您是否将 View-Model-ModelView 模式与 DAL 模式一起使用?
如果这似乎是一个长期开放的问题,我深表歉意,但我最近一直在考虑这个问题。我看到很多关于如何在 C# 中构建企业 n 层应用程序的示例,但在构建独立桌面应用程序方面却没有那么多。
architecture - web site structure/architecture
What web site structure(s)/architecture(s) would the community swear by, with a narrowing down in the direction towards more of a small facebook style project?
I understand the question to be rather broad/subjective; but being relatively new to the area of web development, I find just looking at and learning from examples of working projects most times extremely helpful, and that at other times just blows my mind and changes how I construct future assignments.
With the latter paragraph in mind, does the community have any suggestions on places to look/articles to read?