问题标签 [abstraction]

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.

0 投票
5 回答
1013 浏览

abstraction - 信息隐藏与隐藏的依赖关系

在过程(或功能、模块等)设计中,有哪些常见的最佳实践来平衡对信息隐藏的需求和过程接口中适当的抽象级别与引入隐藏依赖项所固有的问题?

更具体地说,假设我编写了一个名为 getEmployeePhoneNbr(employeeId) 的过程。在内部,该过程是通过查询以employeeId 为键的数据库表来实现的。我想隐藏那些实现细节,但现在该过程依赖于一个外部文件,如果环境发生变化,这会阻碍它的使用。

任何时候过程使用外部资源(文件、数据库等)时都会发生相同的情况。在过程中硬编码该资源的使用感觉是错误的,但我不确定替代方案是什么。

请注意,我不是在使用面向对象的语言。在可能的范围内,我最感兴趣的是广泛适用于任何类型语言的响应。

谢谢,马特

0 投票
1 回答
1592 浏览

c# - C# 自定义对象验证设计

我目前必须为我的应用程序验证自定义字段对象。简单地说,每个 Field 对象都包含有关字段验证的信息以及字段的值。我正在批量验证字段,所以目前,我有一个验证类,每个验证都有一个方法。对于必填字段,它看起来像这样:

现在我的问题是我觉得我应该对验证进行一层抽象,所以不要说:

...我会添加一个验证类,以接受这些值并将其变成这样:

如果我这样做,它将允许我在不使用字段对象的情况下重用验证类,并且还可以进行更好的单元测试……但是,这似乎是不必要的抽象层,而且有些重复…… . 请记住,这是所有验证中最简单的。

建议?

0 投票
3 回答
1755 浏览

python - Python游戏程序的抽象和客户端/服务器架构问题

这就是我现在的位置。我正在设计一款纸牌游戏,旨在将主要组件用于未来的工作。让我束手无策的部分是在服务器和客户端之间创建一个抽象层。启动服务器,然后一个或多个客户端可以连接(本地或远程)。我正在设计一个胖客户端,但我的朋友正在考虑做一个基于 Web 的客户端。我想以允许各种不同客户端调用一组通用服务器命令的方式设计服务器。

因此,首先,我想创建一个管理游戏规则和玩家交互的“服务器”,以及本地 CLI 上的一个“客户端”(为了方便起见,我正在运行 Ubuntu Linux)。我试图充实这两个部分应该如何交互,而不要求未来的客户端基于 CLI 或在本地机器上。

我发现以下两个问题是有益的,但不能完全回答上述问题。

我不需要任何功能齐全的东西。我只想建立抽象的基本机制,以便生成的模型代码适当地反映这种关系:客户端/服务器关系与一体化应用程序有不同的假设。

我从哪里开始?你推荐什么资源?

免责声明:我熟悉各种语言的代码和一般编程/逻辑概念,但几乎没有编写大量代码的实际经验。这个宠物项目是纠正这一点的尝试。

此外,我知道信息已经存在,但我有一种强烈的印象,即我只见树木不见森林。

0 投票
4 回答
1210 浏览

.net - 使用通用基础设施库抽象 .NET 日志记录:

我最近一直在考虑在整个应用程序中抽象我的日志记录。另一个资源上的更具体的帖子导致了“公共基础设施库”的推荐:

http://netcommon.sourceforge.net/

具体来说,Common.Logging 类,它提供了一个通用接口,可以位于许多日志记录实现(例如 log4net)的前面。

不过,我有点不愿意在我的项目中引入另一个 3rd 方代码。

有人用过这个库吗?我很想听听你的经历。

谢谢

0 投票
1 回答
797 浏览

url - 我如何去抽象 URL?

URL 抽象:www.domain.com/perl.pl 到 www.domain.com/perl

我正在阅读麻省理工学院的互联网应用软件工程(特别是http://philip.greenspun.com/seia/basics),作者 Philip Greenspun 提到了 URL 抽象,但似乎并没有涉及任何实际的细节实施它。

我在本地主机上运行 Debian 和 Apache,搞乱 cgi bin 和 python。我想知道:

  1. 我有抽象 URL 的工具吗?
  2. 我该怎么做?
0 投票
1 回答
2772 浏览

c# - 抽象/虚拟方法的通用返回类型

我在两个基类之间有关系:

以及它们的具体实现如下:

根据 MSDN 文档 http://msdn.microsoft.com/en-us/library/ms379564%28VS.80%29.aspx(大约一半)和一个类似(但不相同)的问题 SO 指定返回类型根据子类来自基类的抽象方法

我可以将我的 concreate 实现用于我的重写方法 GetCandidates 的返回类型,但这不是我想要的,我想利用不同抽象类的具体实现。这是父/子数据库关系。我想要实现的目标是可能的吗?我目前收到一个编译时错误,我的 GetCandidates 返回类型不匹配。

谢谢

0 投票
2 回答
2080 浏览

ruby-on-rails - 如何在 Rails 中的模型和控制器之间共享代码?

我的 Rails 模型和控制器代码都需要将文件写入文件系统。

我想将逻辑整合到一种方法中。

在模型和控制器之间共享此方法的最佳方式是什么?

谢谢!

0 投票
1 回答
97 浏览

.net - 使用存储库模式为从同一基础对象派生的聚合提供通用功能

我正在尝试使用存储库模式在现有 DB2 模式上编写数据访问层。这个模式有几个聚合,它们都有一个“文档”的公共基础实体。在构建业务对象时,我将 Document 实体创建为抽象,并将聚合创建为从 Document 派生的实体。例如:

现在,我想为 BillingDocument 创建一个存储库,但我知道我不想在我的 BillingDocument 存储库中加载所有 Document 基本属性,因此我创建了另一个具有通用类型参数的抽象类用于此功能. 但是,我有编码器的块来确定如何返回抽象文档实体的实例,存储库将使用该实例我将为派生的聚合实体编码。我可以通过反射来做到这一点,如下所示,但感觉全错了。

我整个人都扭曲了。有人可以向我保证这没问题,或者告诉我我是个白痴并告诉我更好的方法吗?

提前致谢。

0 投票
2 回答
97 浏览

mysql - 抽象的概念与 MySQL 中的表有关吗?如果是这样,我该怎么做?

我想将各种引擎的数据存储在 MySQL 数据库中,其中包括活塞和旋转引擎。


在 OO 语言中,我可以创建和扩展Engine超类以获取PistonEngineRotaryEngine类。

子类将PistonEngine包含CylinderNoPistonBorePistonStroke等属性。

子类将RotaryEngine包含RotorThicknessRotorDiameter等属性。


在 MySQL 中,虽然我可以分别为活塞式发动机和旋转式发动机创建两个单独的表,但我更愿意将EngineType字段作为发动机数据的一部分,并将两种发动机类型共有的所有数据存储在一个表中。

如何设计我的数据库以尽可能避免数据冗余?

0 投票
2 回答
1090 浏览

oop - 封装是抽象的子集吗?

由于封装和抽象都与信息隐藏有关,我可以将封装理解为抽象的子集吗?