问题标签 [class-design]

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 投票
18 回答
323340 浏览

python - 为什么 __init__() 总是在 __new__() 之后调用?

我只是想简化我的一个类,并引入了一些与享元设计模式相同风格的功能。

但是,我有点困惑为什么__init__总是在__new__. 我没想到会这样。谁能告诉我为什么会发生这种情况以及如何实现此功能?(除了将实现放入__new__感觉很hacky之外。)

这是一个例子:

输出:

为什么?

0 投票
4 回答
3238 浏览

asp.net - 在 ASP.NET 中调用类

我知道我的 ASP.NET,但我不得不承认,我对类很笨,不确定它们是如何工作的。也没有和他们合作过,但我想。但我所知道的是,这是一个我可以保留代码以供重复使用的地方?我的课程将如何使用我的代码?

所以这是我在大约 3 个表单上使用的代码 - 但我想将它保存在 1 个位置,然后在我单击 btnSubmit 时调用它。

我必须在这里放什么来执行上面的代码?

艾蒂安

0 投票
5 回答
1265 浏览

c# - ASP.NET 部分页面类名称最佳实践

当您在 VS 2008 中创建新的 asp.net 页面并选择后面的代码时,它还会创建典型的 aspx.vb 或 aspx.cs 文件以配合它。

在这些文件的顶部,VS 将“部分类”名称命名为文件结构和/或 aspx 文件的名称。

问题:是否有最佳实践?我可以只为我的应用程序中的所有页面或单个目录使用一个类名,而不必给每个页面一个唯一的名称吗?

克里斯

0 投票
4 回答
24214 浏览

c++ - 从 C++ 源代码创建类图?

是否有任何免费工具可用于从 c++ 源文件生成类图,如果可能的话也可用于 mfc 源文件。

0 投票
4 回答
17859 浏览

java - 如何重写方法来调用超类的超类方法?

我的一部分认为这不应该是可能的(即使它是),但我还是会问。

给定以下类层次结构(Grandparent并且Parent来自第 3 方,因此不受我的控制),我将如何覆盖myMethod()inChild以绕过覆盖的实现Parent并调用 in 中的实现Grandparent

假设Parent该类提供了许多其他有用的行为,并且是Child的层次结构的关键元素(换句话说,我不是在寻找“创建Child一个子类Grandparent”。

0 投票
2 回答
612 浏览

class-design - 具有 N 层架构的类设计

这个问题与我之前提出的问题非常接近,但我认为它们不是同一件事,所以认为将它们分开是明智的(当你听到这个问题时,这有点讽刺)。

上一个问题

我有一个分为两个项目的 Web 应用程序:

1) ASP.NET 站点 2) 包含业务对象、逻辑层方法和 DAL 方法的 DLL。它们分为不同的名称空间,但都在同一个 DLL 中。

我越看它并扩展开发,我就越意识到我走错了路。我想将它们拆分为单独的 DLL,以便我可以明确划分职责。

一旦我在不同的 DLL 中有代码,我意识到很多类相互调用。例如,当在 DAL 中创建客户对象列表时,它还会调用 companyDAL.cs 并获取客户所属的公司列表。所以我现在有两个直接相互引用的类。这似乎是一件相当糟糕的事情!它闻起来很糟糕,但我继续前进,并试图在我能做到的地方把事情分开。

为此,我将所有对象取出到接口,并将对它们的所有引用更改为接口。

我希望使用某种 DI(目前只是了解这一点),因此对于每个对象,我创建了一个构造函数,该构造函数为该 DLL 接收一个工厂,(该工厂将为该类可能的每个对象创建一个新实例要求)。我还放置了一个默认构造函数,它将使用默认工厂调用 DI 构造函数,以确保始终使用一个工厂。

一切都编译好了,所以我试了一下,得到了一个stackoverflow!这是我完全意识到,如果我有两个相互需要的类,那么没有另一个就无法实例化。

  • 我是不是把 DI 的事情都搞错了,工厂的想法好吗?

  • 我应该如何避免彼此需要的课程?他们现在这样的原因是为了避免重复代码。我确信我可以编写更简洁的 SQL 以一次性完成,或者至少在同一方法中的几个查询中,但我试图避免在不同的地方重复代码。

感谢您的任何建议。

0 投票
5 回答
235 浏览

c# - 类设计帮助

我有以下数据库表可以使用,我对 oop 有点陌生,所以我想我会在这里问。

我创建了以下类

我还为访问 Dal.Repository 并对每个对象执行 crud 方法的每个对象创建了单独的服务类。IE

我也有每个对象的存储库

IE

在包含人员分配和人员个人详细信息的网页上,我发现自己正在调用 PersonService 和 PersonAssignmentService。

这似乎是很多工作。难道我做错了什么?也许有一种更简单的方法来设计这样的东西,我就是不明白。

谢谢你的帮助

谢谢

0 投票
11 回答
8179 浏览

class-design - 为什么将私有字段和方法放在类的顶部?

我已经在许多地方以多种语言看到过这个事实上的标准,但我从来没有理解它——为什么将你的私有字段和方法放在类声明的顶部?隐喻看来,私有的东西应该位于底部(隐藏),而所有公共的东西都应该位于顶部,因此当您从上到下阅读类时,您首先会看到公共接口,然后是内部工作原理。

这背后的原因是什么?

编辑:澄清一下,我并不是说将所有成员声明在类的顶部,而是将私有成员/方法放在类声明的顶部,在任何公开之前。

0 投票
11 回答
10459 浏览

c# - 如何在 C# 静态和非静态方法之间做出决定?

[编辑]

我最初的问题是“为什么要在静态和非静态之间做出决定?两者都做同样的......”

不幸的是,它被编辑为一个我真正想避免的 C# 特定问题。

所以,让我做一些补充:

当我说接口时,我指的不是 C#-keyword-interface,而是我理解的类似于 C++-interface 的东西:一组定义明确的函数来操作我的对象。当说弱化我的界面时,我的意思是我有不同的功能(静态/非静态)来做同样的事情。当有不同的功能来做同样的事情时,我的界面不再定义良好。

因此,正如管理员 Bob 所发布的,我可以实现一个 Validate() 函数

但是也

回到我的 Copy() 示例,可以像这样实现 Copy()

但是也

或者

当我想到一个包含属于我的文档的所有文件的文件夹时(在这种情况下,我不依赖于具体实例 - 但我依赖于其他事物:))。

一般来说,我说的是静态方法而不是静态类(对不起,如果我忘了提及)。

但正如 Anton Gogolev 所说,我认为我的 Document 类不是一个很好的例子,也没有很好的设计,所以我想我必须看看 Single Responsibility Principle。

我还可以实现某种与我的 DocumentClass 一起运行的 ManagerClass:

例如:

或者

但如果我参考方法 1) 我倾向于创建自己执行任务的对象,而不是创建对的 DocumentObject 执行某些操作的其他对象 (DocumentManager) 。

(我希望这不会指向关于 OOP 的宗教讨论;)。)

[/编辑]


旧版:

起初,这似乎是一个非常基本的问题,例如“何时使用静态方法,何时不使用”,但这是我不时遇到的问题(我很难描述真正的问题是什么;也许只是为了了解为什么(不)使用 1)或为什么(不)使用 2))。

(虽然我使用的是 C#-Syntax,但这不是 C# 限制的问题)

在 OOP 中,有两种处理对象的方法(其中包括):

1)如果我想让我的对象做某事,我只是告诉他这样做:

这就像和一个对象说话一样。

2) 或者,如果您喜欢静态方法:

在某种程度上,我认为静态函数只是“感觉”更好。所以我倾向于经常使用静态方法(独立于具体实例——独立总是好事)。

因此,在设计课程时,我经常需要决定是采用方法 1) 还是方法 2):

想象一下,您有一个“文档”类,它应该代表应该保存到数据库中的文档:

一份文件

  • 由文件系统中的一个或多个图像文件组成(这些成为单个文档页面)
  • 有类似书目的东西 - 用户可以添加有关文档信息的字段 - 保存到额外的文件中
  • 并且应该有一些操作,如 Copy()、AddPage()、RemovePage() 等。

现在我遇到了几种创建此类的方法:

我喜欢这样:我告诉文档将自己复制到数据库 x 并且对象自己这样做。好的。

为什么不?也不错,手感很好。。。

那么,实施哪一个呢?两个都?或者将静态方法放在一种帮助类中?还是选择方法 1) 并坚持不削弱我的 Document-class 的接口?

在考虑这两种方法时,我得出的结论是(理论上)可以将任何函数实现为静态函数:

但也是非静态的:

举一个真实的例子:

[编辑(从路径添加参数“对不起,我忘记了”)]

[/编辑]

但是也:

甚至(有点像 OOP-Overkill):

那么,为什么(不)使用 1)或为什么(不)使用 2)?

(我不会过多地关注 Document 类示例,因为它更像是一个关于良好类设计的一般问题。)

0 投票
1 回答
190 浏览

nhibernate - 为主模板建模:继承与否?

我有一个不容易解释的场景,但我确信这是一个非常普遍的问题。我会尽力说明问题。

假设我们有一个调查应用程序,它允许我们创建调查。每个调查都有自己的结构(包含问题、问题被分组和排序等)。这些调查由管理员管理并称为主调查模板。现在,用户可以选择其中一项主调查,进行一些自定义并对某些人进行调查。

所以,基本上我们的调查都具有相同的结构(集合、属性等),但数据可能不同。

你如何为数据库建模?

我的想法是将所有内容存储在一个表中并创建一个将模板与执行模板分开的列。

你如何为你的课程建模?

我的想法是:

重要提示:调查与其他类有很多关系。如果我们决定子类化。是否应该将它们全部子类化(因为我们将从 master 复制每个对象的数据)?