首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我应该在一个文件中放多少个类?

在云计算领域中,尤其是在Web开发领域,通常建议在单个文件中不要放太多类。一个较好的建议是将每个类和相关的子类(如果有)放在单独的文件中。这么做有几个好处:

  1. 提高代码可维护性:在一个大型项目中,过多地放在单个文件中的类可能会导致文件结构混乱。维护起来相对困难,容易出错。将类组织成多个较小的模块,有助于提高代码的可读性和可维护性。
  2. 代码结构和逻辑清晰:将类放在不同的文件中可以清晰地区分不同功能的代码。对于每个文件中的类可以进行单独审查和维护,避免混淆和错误。
  3. 有助于代码重用和模块化:通过将相似的类放到相同的文件中,可以帮助组织代码重用。同时,每个文件中的类应该关注特定功能或操作,实现代码模块化。

综上所述,建议在不同功能的类之间保持适当的距离。同时,请根据项目实际需求调整类和文件的数量。在实践中,并没有一个固定的答案或规则,而是应该关注代码的可读性和可维护性。同时注意保持代码的灵活性和可扩展性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

比较聚该划分多少个簇?

比较聚 在上期文章层次聚与聚树中,不同对象之间的关系可以通过聚树展现出来,通过聚树我们可以观察哪些对象比较相似,哪些对象距离较远,从而对所有对象的关系有一个整体的把握。...然而,这时候我们并没有获得一个明显的聚簇划分,也即不知道对象可以划分为几类、谁和谁归为一,以及这个聚结果是不是合理,这可以通过比较聚来实现。...,hclust$height里面即为节点对应的高度值(即距离)如下所示为19个节点对应的高度: 高度最大时第一个节点聚簇数目为2,之后每增加一个节点聚簇数目加一,高度最小(距离最小)时聚簇数目即为样品数...因此上图就展示了不同高度水平下聚簇数目的变化。从右往左看,随着高度的降低,聚簇数目增加,图像呈现阶梯状。一般来说曲线越缓,“台阶”越宽,也即增加一个簇间隔的距离大,其聚约有意义。...轮廓宽度 轮廓宽度(silhouette width)是描述一个对象与所属聚簇归属程度的测度,是一个对象同同一组内其他对象的平均距离与该对象同最邻近聚簇内对象平均距离的比较。

72220

面试官问:一个 TCP 连接可以发多少个 HTTP 请求?懵了!

要搞懂这个问题,我们需要先解决下面五个问题: 现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开?...第一个问题 现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开?...另外,如果维持连接,那么 SSL 的开销也可以避免,两张图片是短时间内两次访问 https://www.github.com 的时间统计: ? 头一次访问,有初始化连接和 SSL 开销 ?...第二个问题 一个 TCP 连接可以对应几个 HTTP 请求? 了解了第一个问题之后,其实这个问题已经有了答案,如果维持连接,一个 TCP 连接是可以发送多个 HTTP 请求的。...HTTP/1.1 存在一个问题,单个 TCP 连接在同一时刻只能处理一个请求 它的意思是说:两个请求的生命周期不能重叠,任意两个 HTTP 请求从开始到结束的时间在同一个 TCP 连接里不能重叠。

3K20

面试官问:一个 TCP 连接可以发多少个 HTTP 请求?懵了!

要搞懂这个问题,我们需要先解决下面五个问题: 1、现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开?...先来谈谈第一个问题 现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开?...这样的好处是连接可以被重新使用,之后发送 HTTP 请求的时候不需要重新建立 TCP 连接,以及如果维持连接,那么 SSL 的开销也可以避免,两张图片是短时间内两次访问 https://www.github.com...第二个问题: 一个 TCP 连接可以对应几个 HTTP 请求? 了解了第一个问题之后,其实这个问题已经有了答案,如果维持连接,一个 TCP 连接是可以发送多个 HTTP 请求的。...HTTP/1.1 存在一个问题,单个 TCP 连接在同一时刻只能处理一个请求,意思是说:两个请求的生命周期不能重叠,任意两个 HTTP 请求从开始到结束的时间在同一个 TCP 连接里不能重叠。

52620

重构 -- 一个,难道不配有专属的测试代码吗?

这点我以前确实没想过 刚看到这个观点的时候,是很不以为然的,谁让它标题不吸引人>>>《构建测试体系》 就这标题,谁不知道要测试啊。还好没有“以貌取文”,认真的看了下去。...每个都配备测试代码,烦不烦啊你? 烦。但是项目run的时候爆了烦不烦?那会儿可就不是一个人烦了,那是一个团队一起烦。...就比方说上次我们服务器客户端对接测试一个项目,中间数据传输出问题了,好了,现在是谁的问题都不知道。。。 然后测试端也只能跟后边等着了。...这种问题其实完全可以避免,甚至可以不发生,只要给每个配备一个测试代码。 写一个测试代码能花多少时间,十分钟,测试一下能花多少时间,十分钟。害怕测出问题?...行吧,写,那怎么写啊? 怎么写那是个人自己的事情。但是,想说的是,测试代码,最好写在功能之前,这样可以预先界定功能的具体功能,也可以把思路清晰一下。 至于测试代码要测试哪些东西?

71840

面试官问我:一个 TCP 连接可以发多少个 HTTP 请求?竟然回答不上来...

要搞懂这个问题,我们需要先解决下面五个问题: 现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开?...第一个问题 现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开?...这样的好处是连接可以被重新使用,之后发送 HTTP 请求的时候不需要重新建立 TCP 连接,以及如果维持连接,那么 SSL 的开销也可以避免,两张图片是短时间内两次访问 https://www.github.com...第二个问题 一个 TCP 连接可以对应几个 HTTP 请求? 了解了第一个问题之后,其实这个问题已经有了答案,如果维持连接,一个 TCP 连接是可以发送多个 HTTP 请求的。...HTTP/1.1 存在一个问题,单个 TCP 连接在同一时刻只能处理一个请求,意思是说:两个请求的生命周期不能重叠,任意两个 HTTP 请求从开始到结束的时间在同一个 TCP 连接里不能重叠。

75850

面试官问我:一个 TCP 连接可以发多少个 HTTP 请求?竟然回答不上来...

要搞懂这个问题,我们需要先解决下面五个问题: 现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开?...第一个问题 现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开?...这样的好处是连接可以被重新使用,之后发送 HTTP 请求的时候不需要重新建立 TCP 连接,以及如果维持连接,那么 SSL 的开销也可以避免,两张图片是短时间内两次访问 https://www.github.com...第二个问题 一个 TCP 连接可以对应几个 HTTP 请求? 了解了第一个问题之后,其实这个问题已经有了答案,如果维持连接,一个 TCP 连接是可以发送多个 HTTP 请求的。...HTTP/1.1 存在一个问题,单个 TCP 连接在同一时刻只能处理一个请求,意思是说:两个请求的生命周期不能重叠,任意两个 HTTP 请求从开始到结束的时间在同一个 TCP 连接里不能重叠。

35810

一个Java(必看,附带精彩吐槽)

大家好,一个Java,很高兴能向大家介绍一下的前世今生。...当然,模具只是一个比喻,更准确一点讲,Java,也就是,应该是一种类型,里面可以定义属性和方法,也只有定义了这些,才变得有作用、有意义,才会有血有肉,否则就是空壳一个。...代码编写完成后,使用javac命令就把我们这些Java编译成了一个个的.class文件,有些高端玩家还会使用javap命令,查看对应的字节码,深入了解我们的运行机制,嗯,比较有逼格的感觉。...接下来,加载器就要登场了,它的主要职责就是把.class文件加载到内存中,加载器有三种:根加载器(Bootstrap Classloader),扩展加载器(Extension Classloader...这就是一个朴实的Java,为了人类的幸福,为了世界的和平,在自己的岗位上克己奉公,认认真真地完成自己的职责,一丝不苟地执行命令,忠于职守,奉献到底,有这样的表现而感到无上的光荣。

31830

一个Java(必看,附带精彩吐槽)

大家好,一个Java,很高兴能向大家介绍一下的前世今生。要知道,自从面向对象这种编程思想横空出世以来,它变得越来越受欢迎,而这个概念又在其中扮演了非常核心的角色,对于这一点,感到很骄傲。...当然,模具只是一个比喻,更准确一点讲,Java,也就是,应该是一种类型,里面可以定义属性和方法,也只有定义了这些,才变得有作用、有意义,才会有血有肉,否则就是空壳一个。...代码编写完成后,使用javac命令就把我们这些Java编译成了一个个的.class文件,有些高端玩家还会使用javap命令,查看对应的字节码,深入了解我们的运行机制,嗯,比较有逼格的感觉。...接下来,加载器就要登场了,它的主要职责就是把.class文件加载到内存中,加载器有三种:根加载器(Bootstrap Classloader),扩展加载器(Extension Classloader...这就是一个朴实的Java,为了人类的幸福,为了世界的和平,在自己的岗位上克己奉公,认认真真地完成自己的职责,一丝不苟地执行命令,忠于职守,奉献到底,有这样的表现而感到无上的光荣。

37630

面试官问我:一个 TCP 连接可以发多少个 HTTP 请求?竟然回答不上来..

大家好,又见面了,是全栈君。 曾经有这么一道经典面试题:从 URL 在浏览器被被输入到页面展现的过程中发生了什么?...第一个问题 现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开?...这样的好处是连接可以被重新使用,之后发送 HTTP 请求的时候不需要重新建立 TCP 连接,以及如果维持连接,那么 SSL 的开销也可以避免,两张图片是短时间内两次访问 https://www.github.com...第二个问题 一个 TCP 连接可以对应几个 HTTP 请求? 了解了第一个问题之后,其实这个问题已经有了答案,如果维持连接,一个 TCP 连接是可以发送多个 HTTP 请求的。...HTTP/1.1 存在一个问题,单个 TCP 连接在同一时刻只能处理一个请求,意思是说:两个请求的生命周期不能重叠,任意两个 HTTP 请求从开始到结束的时间在同一个 TCP 连接里不能重叠。

31620

一个Java(必看,附带精彩吐槽)

大家好,一个Java,很高兴能向大家介绍一下的前世今生。要知道,自从面向对象这种编程思想横空出世以来,它变得越来越受欢迎,而这个概念又在其中扮演了非常核心的角色,对于这一点,感到很骄傲。...当然,模具只是一个比喻,更准确一点讲,Java,也就是,应该是一种类型,里面可以定义属性和方法,也只有定义了这些,才变得有作用、有意义,才会有血有肉,否则就是空壳一个。...代码编写完成后,使用javac命令就把我们这些Java编译成了一个个的.class文件,有些高端玩家还会使用javap命令,查看对应的字节码,深入了解我们的运行机制,嗯,比较有逼格的感觉。...接下来,加载器就要登场了,它的主要职责就是把.class文件加载到内存中,加载器有三种:根加载器(Bootstrap Classloader),扩展加载器(Extension Classloader...这就是一个朴实的Java,为了人类的幸福,为了世界的和平,在自己的岗位上克己奉公,认认真真地完成自己的职责,一丝不苟地执行命令,忠于职守,奉献到底,有这样的表现而感到无上的光荣。

32120

面试官问我:一个 TCP 连接可以发多少个 HTTP 请求?竟然回答不上来...

要搞懂这个问题,我们需要先解决下面五个问题: 现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开?...第一个问题 现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开?...这样的好处是连接可以被重新使用,之后发送 HTTP 请求的时候不需要重新建立 TCP 连接,以及如果维持连接,那么 SSL 的开销也可以避免,两张图片是短时间内两次访问 https://www.github.com...第二个问题 一个 TCP 连接可以对应几个 HTTP 请求? 了解了第一个问题之后,其实这个问题已经有了答案,如果维持连接,一个 TCP 连接是可以发送多个 HTTP 请求的。...HTTP/1.1 存在一个问题,单个 TCP 连接在同一时刻只能处理一个请求,意思是说:两个请求的生命周期不能重叠,任意两个 HTTP 请求从开始到结束的时间在同一个 TCP 连接里不能重叠。

48910

师父给了我一个 .proto 文件应该怎么使用?

摄影:产品经理 脆脆的烤鱼皮 回想我年轻的时候,在做一个项目时,需要计算斐波那契数列第 n 项的值。但是只会使用递归来实现。众所周知,递归算法计算斐波那契数列的效率极差,速度极慢。...于是求助于当时的师父,问他有没有办法帮我解决这个问题。 师父说:“有啊,写过,但是代码是用C++ 写的,你估计看不懂。不过没关系,你用 Python 直接调用就可以了。”...很惊讶:“用 Python 直接调用C++代码吗?看起来似乎很麻烦啊。” 师父说:“一点也不麻烦。给你一个.proto 文件一个地址,你拿去自动生成代码就能调用了。”...于是,拿到了一个mentors_secret.proto文件,里面的内容非常简单: syntax = "proto3"; message NumToCalc { int32 num = 1...总结 当我们拿到一个.proto文件,需要去调用gRPC 服务时,我们一般有如下步骤: 自动生成mentors_secret_pb2.py和mentors_secret_pb2_grpc.py文件

2.6K30

MainForm可以进行设计,但不是文件中的第一个

错误分析: C#允许在某命名空间下的一个代码文件中定义多个,比如在一个主窗体MainForm的cs文件中除了定义窗体本身的外,还可以定义全局变量的,如下: public class...PublicValue { public static List mainlist = new List(); } 这样的一个中的变量就是全局变量...,可以在该命名空间下的任何窗体和中访问,访问方式为通过“.”运算符: PublicValue.mainlist 但是这个只能放在主窗体的后面定义。...对于有设计器的控件都要求控件所在的是排在第一个。主窗体中有控件。...解决办法: 把主窗体的的定义代码public partial class MainForm :Form放在最前面,其余的定义放在后面。

82010

要解析一个配置文件,当打开文件的时候崩溃了

薛定谔的猫 首先,说一些题外话,按照一贯的风格,这篇文章本应该叫《浅谈如何优雅读取特殊格式配置文件》,但是最近被某些网站的推送恶心到了,是不太喜欢这种标题的,所以我一直尽量避免使用这种标题党式的标题...,但是,好奇心驱使,想做一次实验,欢迎大家留言,说出你的想法,你更喜欢哪个标题?...要解析一个配置文件,当打开文件的时候崩溃了 | 为人性癖耽佳句,语不惊人死不休 B. 浅谈如何优雅读取特殊格式配置文件 | 少一点套路,多一点真诚 C....将文件加载进来,处理成一个特殊的数据结构,标记出来注释,字段,值等信息,直接对这个结构进行操作,然后再落盘回去,即形成如下图结构。 ?...作为一名老CRUD,是这么想的,在原始数据加载时候,引入一个纯数据缓存队列,用于应对读取操作,引入一个辅助元数据队列, 用于协助判断键具体的类型,例如,键值对、键多值对等情况。

41720

要解析一个配置文件,当打开文件的时候崩溃了

猫.jpg 薛定谔的猫 首先,说一些题外话,按照一贯的风格,这篇文章本应该叫《浅谈如何优雅读取特殊格式配置文件》,但是最近被某些网站的推送恶心到了,是不太喜欢这种标题的,所以我一直尽量避免使用这种标题党式的标题...要解析一个配置文件,当打开文件的时候崩溃了 | 为人性癖耽佳句,语不惊人死不休 B. 浅谈如何优雅读取特殊格式配置文件 | 少一点套路,多一点真诚 C. ...将文件加载进来,处理成一个特殊的数据结构,标记出来注释,字段,值等信息,直接对这个结构进行操作,然后再落盘回去,即形成如下图结构。...作为一名老CRUD,是这么想的,在原始数据加载时候,引入一个纯数据缓存队列,用于应对读取操作,引入一个辅助元数据队列, 用于协助判断键具体的类型,例如,键值对、键多值对等情况。...在外层加入一个布隆过滤器,用于在遍历的时候,先抵消部分无变更键。 这样,还能顺便实现一波恢复操作。 读取文件架构.png 整体架构,归结如上图所示。

41500

为什么要创建一个不能被实例化的

但如果有一天,你发现写了这样一个: class People: def say(self): print(f'叫做:{self.name}') def __new...一个不能被初始化的,有什么用? 这就要引入我们今天讨论的一种设计模式——混入(Mixins)。 Python 由于多继承的原因,可能会出现钻石继承[1]又叫菱形继承。...Mixins 是一个 Python ,它只有方法,没有状态,不应该被初始化。它只能作为父被继承。每个 Mixins 只有一个或者少数几个方法。不同的 Mixin 的方法互不重叠。...但是 在写 Mixins 的时候,我们不会写__init__方法,也不会写类属性。并且 Mixin 中的方法看起来更像是工具方法。 我们可以写很多个 Mixin ,然后用一个子类去继承他们。...最后,我们对比一下抽象(Abstract Class)、接口(Interface)和混入(Mixins)的区别: 抽象: 包含一个或多个抽象方法。 允许包含状态(实例变量)和非抽象方法。

3.4K10
领券