问题标签 [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.
php - 允许 PHP 应用程序插件的最佳方式
我正在用 PHP 启动一个新的 Web 应用程序,这一次我想创建一些人们可以通过使用插件接口进行扩展的东西。
如何在他们的代码中编写“钩子”以便插件可以附加到特定事件?
c - 良好的 C 类 STL 库
具有向量、双端队列、堆栈、哈希图、树形图、集合等数据结构的 C 语言库有哪些好的?请使用纯 C,并且与平台无关。
architecture - 使用 N 层解决方案是否有任何负面原因?
我对我的公司很陌生(2 周),我们正在使用 DotNetNuke 的 .NET 3.5 Team Foundation 为我们的系统启动一个新平台。我们的“建筑师”建议我们使用一个类项目。当然,我回想一下“三层”架构(业务、数据、Web 类项目)。
使用这种架构有什么缺点吗?专业人士将代码与数据分离,使类对象远离您的代码等。
java - 我应该如何构建一个 Java 应用程序,我应该把我的类放在哪里?
首先,我知道如何构建一个 Java 应用程序。但我一直很困惑我的课应该放在哪里。有人支持以严格的面向领域的方式组织包,其他人则按层分开。
我自己一直有问题
- 命名,
- 放置
所以,
- 您将域特定常量放在哪里(以及此类的最佳名称是什么)?
- 您将基础设施和特定领域的东西的类放在哪里(例如,我有一个 FileStorageStrategy 类,它将文件存储在数据库中,或者存储在数据库中)?
- 在哪里放置异常?
- 有什么标准可以参考吗?
architecture - 不同逻辑层上的接口
假设您有一个分为 3 层的应用程序:GUI、业务逻辑和数据访问。在您的业务逻辑层中,您已经描述了您的业务对象:getter、setter、accessors 等等……您明白了。业务逻辑层的接口保证了业务逻辑的安全使用,所以你调用的所有方法和访问器都会验证输入。
这在您第一次编写 UI 代码时非常棒,因为您有一个可以信赖的定义整齐的界面。
但是棘手的部分来了,当您开始编写数据访问层时,业务逻辑的接口无法满足您的需求。您需要更多的访问器和获取器来设置隐藏/曾经隐藏的字段。现在你不得不侵蚀你的业务逻辑的接口;现在可以从 UI 层设置字段,UI 层没有业务设置。
由于数据访问层所需的更改,业务逻辑的接口已经被侵蚀到甚至可以使用无效数据设置业务逻辑的程度。因此,该接口不再保证安全使用。
我希望我足够清楚地解释了这个问题。您如何防止接口侵蚀,维护信息隐藏和封装,同时仍然适应不同层之间的不同接口需求?
c - Send messages to program through command line
I have this program, we'll call it Host. Host does all kinds of good stuff, but it needs to be able to accept input through the command line while it's running. This means it has to somehow send its other process data and then quit. For example, I need to be able to do this:
This should somehow end up calling some function in Host called
Host is a C program, and does not need to support multiple instances.
An example of this is Amarok music player. With Amarok running and playing, you can type "amarok --pause" and it will pause the music.
I need to be able to do this in Linux or Windows. Preferably Linux.
What is the cleanest way to implement this?
c - 在 C 函数指针中传递更多参数
假设我正在创建一个国际象棋程序。我有一个功能
这将在每次有效移动时调用函数指针操作。这一切都很好,但是如果我需要向动作函数传递更多参数怎么办?例如:
重新定义函数指针并不是最优解。foreachMove 函数用途广泛,代码中的许多不同位置都引用了它。这些引用中的每一个都必须更新它们的函数以包含它们不需要的参数是没有意义的。
如何将额外的参数传递给我通过指针调用的函数?
architecture - 设计辩论:存储和操作版本化对象的好方法是什么?
我一开始是故意让这个很模糊的。我正在寻找讨论以及哪些问题比我寻找硬性答案更重要。
我正在设计一个执行投资组合管理之类的应用程序。我到目前为止的设计是
- 问题:需要解决的问题
- 解决方案:针对一个或多个问题提出的解决方案
- 关系:两个问题、两个解决方案或一个问题和一个解决方案之间的关系。进一步细分为:
- 父子 - 某种分类/树层次结构
- 重叠 - 两个解决方案或两个问题真正解决同一概念的程度
- 地址 - 问题解决解决方案的程度
我的问题是关于这些事物的时间性质。问题突然出现,然后消失。解决方案有一个预期的解决日期,但在开发过程中可能会进行修改。随着问题和解决方案的发展,关系的程度可能会随着时间而改变。
那么问题来了:对这些东西进行版本控制的最佳设计是什么,这样我就可以同时了解我的投资组合的当前和历史观点?
后来:也许我应该提出一个更具体的问题,尽管@Eric Beard 的回答值得一提。
我考虑了三种数据库设计。我将充分展示它们的缺点。我的问题是:选择哪个,或者你能想出更好的东西吗?
1:问题(以及单独的解决方案)在版本控制中是自引用的。
这是有问题的,因为每次我想要一个新版本时,我都必须复制整行,包括那个长description
列。
2:新建关系类型:版本。
这只是将关系从问题和解决方案表移动到关系表中。同样的重复问题,但可能有点“干净”,因为我已经有了一个抽象的关系概念。
3:使用更类似于Subversion的结构;将所有问题和解决方案属性移动到单独的表中并对其进行版本控制。
这意味着要加载问题或解决方案的当前版本,我必须获取属性的所有版本,按日期对它们进行排序,然后使用最新版本。那可能并不可怕。对我来说真正糟糕的是我无法在数据库中对这些属性进行类型检查。该value
列必须是自由文本。我可以将该name
列作为对具有列的单独attribute_names
表的引用type
,但这不会强制表中的类型正确attributes
。
稍后:回复@Eric Beard 关于多表外键的评论:
唉,我所描述的很简单:只有两种类型的事物(问题和解决方案)。我实际上有大约 9 或 10 种不同类型的事物,因此在您的策略下我将有 9 或 10 列外键。我想使用单表继承,但事物的共同点太少了,将它们组合到一个表中会非常浪费。
architecture - 你是如何进行系统集成的?
我很好奇不同的人如何解决系统集成问题。我有一种感觉,在过去的几年中,越来越多的工作进入了集成系统,并且这种工作需求也会增加。
我想知道您是否可以通过开发自己的小型服务来解决它,然后再连接,或者您是否使用某种产品(WebSphere、BizTalk、Mule等)。我还认为了解如何管理和维护这些解决方案(您如何解决安全性、仪器等)、您的解决方案遇到过什么样的问题等等会很有趣。
architecture - 命名空间/解决方案结构
对于提出如此笼统的问题,我深表歉意,但这对我来说可能具有挑战性。我的团队即将开始一个大型项目,希望将多年来发展的所有随机一次性代码库整合在一起。鉴于该项目将涵盖整个公司的标准化逻辑实体(“客户”、“员工”)、小任务、控制小任务的大任务以及公用事业服务,我正在努力找出构建命名空间和代码结构。
虽然我想我没有给你足够的细节来继续下去,但你有任何资源或建议来说明如何在逻辑上分割你的域吗?如果有帮助,大部分功能将通过 Web 服务显示,我们是一家拥有所有最新小玩意和小工具的Microsoft商店。
- 我正在讨论一个带有子项目的大规模解决方案,以使引用更容易,但这会使其过于笨拙吗?
- 我应该封装遗留的应用程序功能,还是在命名空间中完全不可知(例如,创建一个
OurCRMProduct.Customer
类而不是一个泛型Customer
类)? - 每个服务/项目应该有自己的
BAL
andDAL
,还是应该是一个完全独立的程序集,所有内容都引用?
我没有组织过如此深远的项目的经验,只有一次性的,所以我正在寻找我能得到的任何指导。