Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 内部api,并在私有api中受保护_C#_Protected_Internal_Api Design - Fatal编程技术网

C# 内部api,并在私有api中受保护

C# 内部api,并在私有api中受保护,c#,protected,internal,api-design,C#,Protected,Internal,Api Design,我在大约12人的开发团队中工作,我们建立了一套合理的API,我们只在严格的内部基础上使用。通常,所有类和接口都是公共的,因为它们就是这样完成的。我经常考虑将一些构造函数内部化的价值,以便API的使用者(尽管是内部的)必须使用工厂或其他一些我现在想不起来的原因 这是你和你的团队练习的吗 这对单元测试有何影响?您是否发现可以通过类的工厂对类进行单元测试,或者通过PrivateObject之类的方式访问构造函数?答案是肯定的;我当前的项目只有一个开发人员在工作——我——但我仍然使用可见性和其他访问修饰

我在大约12人的开发团队中工作,我们建立了一套合理的API,我们只在严格的内部基础上使用。通常,所有类和接口都是公共的,因为它们就是这样完成的。我经常考虑将一些构造函数内部化的价值,以便API的使用者(尽管是内部的)必须使用工厂或其他一些我现在想不起来的原因

这是你和你的团队练习的吗


这对单元测试有何影响?您是否发现可以通过类的工厂对类进行单元测试,或者通过PrivateObject之类的方式访问构造函数?

答案是肯定的;我当前的项目只有一个开发人员在工作——我——但我仍然使用可见性和其他访问修饰符,以及更复杂的设计模式(如有必要)。原因如下:

如果您愿意,编译器可以成为实施良好设计模式的最佳工具之一。把一切公之于众可能会让人头疼,当你必须维护一个对象时,它在程序执行过程中的正常状态是面向对象的,相当于一个人在手术台上生活,胸部裂开,每个认识他的人,从他的孩子到他的电力公司,都会在他的重要器官里探探,让他做他们想做的事。增加或移除另一只手可能导致患者心脏骤停

代码应该是自文档化的。标记为内部的类或类成员意味着它可能应该是内部的;如果所有东西都是公开的,你就不知道在与对象交互时是否有什么东西不应该碰。再一次,你让你的病人坐在手术台上,突然一个新的家伙进来,抓住肝脏,说嘿,这是干什么的?。物体应该握手,被告知去做某事,然后放手去做,他们的肝脏功能除了他们之外,其他人都不关心

代码应该可以由您的后代维护。这可以追溯到前两条规则,但基本上,有人应该能够打开您的代码库,找到入口点并跟踪基本的执行流,同时查看沿途使用的对象并确定它们的一般形式和功能。回到手术台上的病人,比方说五年后有人走进这个场景;一个人在一张桌子上劈开了门,里面有50个人。这看起来不像他见过的任何礼貌的社会习俗;这可能看起来最像是人类的祭祀仪式,大多数人遇到这种情况时的第一反应就是逃跑


然而,硬币的另一面是,为了自身的利益而实现的设计模式通常是一件非常糟糕的事情。一旦你大学毕业并找到了第一份工作,没有人真正关心你知道如何实施战略模式,你不应该一有机会就说你知道了。每种模式都有一套适用的环境。如果你是一名医生,你会对下一个进来只是说你能做的病人进行血管成形术吗?

答案是肯定的;我当前的项目只有一个开发人员在工作——我——但我仍然使用可见性和其他访问修饰符,以及更复杂的设计模式(如有必要)。原因如下:

如果您愿意,编译器可以成为实施良好设计模式的最佳工具之一。把一切公之于众可能会让人头疼,当你必须维护一个对象时,它在程序执行过程中的正常状态是面向对象的,相当于一个人在手术台上生活,胸部裂开,每个认识他的人,从他的孩子到他的电力公司,都会在他的重要器官里探探,让他做他们想做的事。增加或移除另一只手可能导致患者心脏骤停

代码应该是自文档化的。标记为内部的类或类成员意味着它可能应该是内部的;如果所有东西都是公开的,你就不知道在与对象交互时是否有什么东西不应该碰。再一次,你让你的病人坐在手术台上,突然一个新的家伙进来,抓住肝脏,说嘿,这是干什么的?。物体应该握手,被告知去做某事,然后放手去做,他们的肝脏功能除了他们之外,其他人都不关心

代码应该可以由您的后代维护。这可以追溯到前两条规则,但基本上,有人应该能够打开您的代码库,找到入口点并跟踪基本的执行流,同时查看沿途使用的对象并确定它们的一般形式和功能。回到手术台上的病人,比方说五年后,有人走进来 这一幕,;一个人在一张桌子上劈开了门,里面有50个人。这看起来不像他见过的任何礼貌的社会习俗;这可能看起来最像是人类的祭祀仪式,大多数人遇到这种情况时的第一反应就是逃跑


然而,硬币的另一面是,为了自身的利益而实现的设计模式通常是一件非常糟糕的事情。一旦你大学毕业并找到了第一份工作,没有人真正关心你知道如何实施战略模式,你不应该一有机会就说你知道了。每种模式都有一套适用的环境。如果你是一名医生,你会对下一个进来说你能做的病人进行血管成形术吗?

这实际上不是一个编程问题,而是一个过程问题。工厂阻碍了大量的静态分析,也是一个难题。在使用这种模式之前,你首先要考虑工厂是否会成为净利润。你为什么要使用工厂?你真的打算插入不同的实现吗?@FatherStorm我努力想办法问这个问题,并让它固定下来,所以可能我没有把它正确地表达出来。我想问一个api设计问题。当您开发一个供内部使用的API时,您是否关心私有类或内部类、构造函数或接口?这不是一个“如何编写代码”的问题,但我不确定这是否是我所说的过程问题。@Kirk Woll-我会在为消耗工厂的代码编写单元测试时创建一个假工厂。这实际上不是一个编程问题,而是一个过程问题。工厂妨碍了大量的静态分析和测试也是一种痛苦。在使用这种模式之前,你首先要考虑工厂是否会成为净利润。你为什么要使用工厂?你真的打算插入不同的实现吗?@FatherStorm我努力想办法问这个问题,并让它固定下来,所以可能我没有把它正确地表达出来。我想问一个api设计问题。当您开发一个供内部使用的API时,您是否关心私有类或内部类、构造函数或接口?这不是一个“如何编写代码”的问题,但我不确定这是否是一个我称之为“流程”的问题。@Kirk Woll-当我为消耗工厂的代码编写单元测试时,我会创建一个假工厂。Gold,特别是最后一段。Gold,特别是最后一段。