什么是关注点分离?

时间:2020-03-06 14:24:20  来源:igfitidea点击:

什么是关注点分离?
有什么事吗
一个人如何将一个应用程序划分为这些"不同的关注点"?

解决方案

维基百科:

在计算机科学中,关注点分离(SoC)是将计算机程序分解为不同功能的过程,这些功能在功能上应尽可能少地重叠。关注点是程序中的任何关注点或者关注点。通常,关注与功能或者行为同义。 SoC的发展传统上是通过模块化和封装并借助信息隐藏来实现的。

我发布此消息不是为了获得代表,而是想知道为什么我们会问一个很容易回答的问题。

http://en.wikipedia.org/wiki/Separation_of_concerns

In computer science, separation of concerns (SoC) is the process of breaking a computer program into distinct features that overlap in functionality as little as possible. A concern is any piece of interest or focus in a program. Typically, concerns are synonymous with features or behaviors. Progress towards SoC is traditionally achieved through modularity and encapsulation, with the help of information hiding.

该原则指出,给定问题涉及不同类型的关注点,应对其进行识别和分离以应对复杂性,并实现所需的工程质量因素,例如鲁棒性,适应性,可维护性和可重用性。关联

一般来说,这意味着我们将软件划分为功能不重叠的不同区域。

维基百科有一个很好的解释:

http://en.wikipedia.org/wiki/Separation_of_concerns

问题是软件功能的不同方面。例如,软件的"业务逻辑"是一个问题,而人使用该逻辑的接口是另一个。

关注点的分离是使每个关注点的代码保持分离。更改接口不需要更改业务逻辑代码,反之亦然。

模型-视图-控制器(MVC)设计模式是将这些问题分开以提高软件可维护性的绝佳示例。

欲获得更多信息:

  • 关注点分离
  • MVC

并不是我们问题的真正答案,但是如果我们对此感兴趣,则有一个相关的设计模式称为"依赖倒置"。

假设我们有一个类,该类的方法需要受到该类外部的影响,或者我们需要该类的多个实现,或者事实是它是该类的方法使单元测试变得困难。我们可以将该方法放在一个完全独立的类中,然后将第一个类的实例作为参数传递。

这在使用模拟接口时特别有用。我们可以通过传递带有硬编码值和预期结果的其他类的模拟来测试该方法。

我们了解HTML和CSS吗?那就是关注点分离。

HTML文件(可能是XML)定义了文档结构。
CSS文件定义了文档在屏幕上的显示方式。

维基百科上对此进行了描述:http://en.wikipedia.org/wiki/Separation_of_concerns

单一职责原则中规定的价值是功能/类/方法只能做一件事。它应该做的一切,做好的事情以及仅做的事情。

基本上,这意味着我们不应该将想法混在一起成块状粘贴,而应该在代码中将想法清晰地分开。如果我们不这样做,则很难更改,测试或者调试代码。如果我们将它们分开,则可以自由更改。例如,如果我们用查询来替换html生成器,我们将发现很难更改格式,并且将很难切换到其他查询。如果将它们分开,那么这两个事情都会变得容易。或者更容易,至少。

数据可以用许多不同的方式表示,如果我们可以在表示之间进行转换,那么选择使用哪种表示就无关紧要,因为我们应该能够访问和操纵该数据。如果我们有通用语言翻译器,那么有人用法语,德语或者阿拉伯语告诉我们时间就没关系了;我们的翻译能力将确保我们知道时间。
用数据术语,三个重要的表示很重要:
?数据在何处以及如何存储的物理表示;
?可以存储什么数据的逻辑表示,其语义以及与其他数据的关系;
?以及外部表示,这就是用户的外观。假设可以在不同的表示形式之间进行翻译,从而使人们能够以自己喜欢的方式理解和使用数据。
因此,在物理级别上,数据库技术人员将能够独立于逻辑描述或者外部描述来优化数据的物理存储,前提是他们调整了存储的描述以及表示之间的转换。
通过分离这些问题,可以构建通用数据集合,这些通用数据集合可以由具有不同需求和使用不同表示形式的不同用户使用,而无需重复数据。
在整个课程中,我们将重新介绍这些特征