我想学习在我的代码使用类正确的方式,当它不是像明显将一组客户,狗从动物继承等。
我已经折断的大段代码为“特色”,如Installer.cs
, Downloader.cs
, UiManager.cs
。 我能找到有这些类与对方的属性和方法互动的唯一方式是让他们所有的静态,这是我一直在说的另一个问题是错误的路要走。
所以我的问题是三两件事之一:
还有一种方法,使类互相交谈,我只是不明白呢。
类不应该试图说服对方,而是进行一次性的操作,然后返回的东西回到main/form1
,其主类就可以使用传递到另一个类一次性的行动。
类是真的只为赚很多情况下是有用的,而且有一些其他的结构完全是我需要了解从主类抽象的功能大块出来。
所有我能找到我观看教程和讲座似乎只告诉你类如何工作 ,而不是何时以及如何在实际产品中使用它们。
编辑 - 更具体的例子:
说我已经被看作一个字符串,它是中央的整个应用程序,并需要和/或通过每一个类可能被修改。 如何移动,而不会任其在一个课堂上的一切,或将其静态代码周围的这些信息?
我看不到的方式来让该字符串生活在Form1
不使其静态的(因为所有形式的活动和功能需要能够看到它把它传递给一个类)。
我看不到的方式来把字符串转换成另一个类,而不必进行串并全班静态的,因此其他类可以看进去。
也许还有什么我失踪约实际上实例化类,使物体彼此交互。
我认为所有的直觉是正确的。
不,不是。 静态或实例。
这是一个设计选择(而且有很多在那里)。 我是一个务实的,所以我认为,产生spaguethi代码一个不好的设计模式选择的设计模式。 但是,对于一个项目一个糟糕的设计模式可以是另一个项目的一个很好的设计模式。 尝试读取头第一种设计模式的书。
是的,有接口和抽象类。
一些更多的想法:
我不认为一定要避免使用静态方法或类。 什么是必须回避的是思念使用静态方法或类,如语言里面的小姐用应有尽有。 但是很难界定什么是思念使用静态的,因为静态方法或类是格外危险的,人们喜欢说,避免static关键字都没有。 静态方法会在内存中,除非你结束你的应用程序,所以如果你不处理静态方法内部的连接,你将有一个非常糟糕的一天。
我有一个实用工具项目和公用事业项目中我有一个数据类。 数据类提供对数据库的访问。 这是一个静态类。 为什么?
嗯,首先,它是静态的,因为连接字符串来自webconfig。 所以我有一个静态构造函数(运行一次,当应用程序启动和类被提及)谁读的webconfig并存储在一个静态私有成员变量的字符串。 我觉得这是一个很大优于阅读webconfig文件,并创建一个范围变量10 bilion次天。 该方法是静态的,因为他们是很简单的,这意味着它们不需要很多的配置工作,他们只需要几个参数,它们仅用于数据访问项目。 我所有的网站的用户所使用的方法(静态的)相同的情况下,但每个人都使用不同的参数静态方法,所以他们从它那里得到(它们共享管道,但他们喝的水不同),不同的反应。 它是只需要格外小心里面的方法来清洁家居(每处置范围的情况下),因为如果你不自己将留在内存中。 最后,我的经营业务是关于数据的操作,非静态数据类意味着更多的内存使用比静态的(CPU使用率在两种模式几乎相同)。
public abstract class Data
{
[...]
static Data()
{
#if DEBUG
_Connection = ConfigurationManager.AppSettings["debug"];
#endif
#if RELEASE
_Connection = ConfigurationManager.AppSettings["release"];
#endif
[...]
}
[...]
}
在一天结束时,我使用静态时:
- 如果它很简单(我可以控制每一个环节);
- 如果它足够小(我使用扩展方法来验证,并且它们是静态的);及
- 如果是重使用。
除此之外,我使用图层来组织我的项目(POCO +工厂模式)。 我有一个实用的项目,那么实体样板工程,然后访问项目,那么经营业务逻辑的项目,然后一个网站,一个API,管理人员,等等。 在公用事业项目中的类不相互影响,但实体模型项目中的类做(一类可以在其内部都有另一个类的实例)。 实体模型项目不与公用事业项目交互,因为它们具有相同的水平,他们相互影响在另一个层面上,在接入项目,但它是在数据操作项目更直观。
类交谈海誓山盟时,他们有一个参考,为了使A到传递消息给B,A需要乙基准(实例或静态参考)
类可以互相交谈,或对controlls整个过程另一个类返回的信息(这实际上是一种设计模式)
对于从主类抽象的信息(或任何类别)你有接口和抽象类
从四人帮的设计模式的书这是一个必须在这种情况下阅读。 别的东西要牢记旁边是你的设计的简单,有时试图为适合设计模式只是导致最终可能会创造更多的spaguethi代码。 作为一个经验法则总是试图sepparate从逻辑演示的funcionality,想了阶级的人交谈海誓山盟和执行工作(这是有点奇怪iknow但有时它帮助我有这样的想法)
文章来源: Is it bad form to try and have classes other than main/form1 interact with each other? [closed]