2010-07-15 97 views
1

作为一个背景,我即将成为Comp E的一名高级工程师,目前正在从事一项涉及使用Monotouch和C#开发iPad的实习项目。作为一个在学期内同时拥有多个项目的学生,为了获得最终产品,代码风格通常被完全忽略。我相信你们都知道那是怎么回事。全局变量或棘手的变量传递计划?

现在我有更多的时间来开发,计划和设计我的代码,我被困在“快速简单的方式”或“复杂的棘手方式”之间。我会概述我的设计(这可能是可怕的开始),并欢迎所有的建议。

我正在创建一个简单的iPad应用程序,用户可以选择汽车品牌,然后选择用不同型号在屏幕的另一侧填充图像。现在,当用户选择该模型时,它会将它们带到另一个屏幕,我要求获取更多信息,例如价格,年份等。在第二个屏幕上,我将选定车型的图像作为“提醒”当屏幕改变时您再次搜索。现在填充该图像取决于选择哪个制作和哪个模型。这些都是基于二维数组信息完成的。所以汽车[0] [3]将是Acura-TSX车型,汽车[1] [0] - 宝马1系。

现在试图摆脱大学的一切投入一个巨大的主意,我知道它不漂亮,但它的工作和大学是关于点不风格,我已经开始分解成功能和辅助函数的东西。当我调用将切换屏幕并最终加载图像的函数时,我必须将makeIndex和modelIndex传递给之前选择make和models之后设置的模型索引,以便有一堆调用/返回和变量传递。在我的脑海中,简单易用的解决方法是使用2个全局变量,但我知道这是不好的做法,并且正在尝试开发更好的编码风格。

对于如何做到这一点你有什么建议?简单地说一句“拧紧好的做法”并且用快速的方式去做会更好吗?或者我应该花时间去研究多项功能,因为其中许多功能需要了解这些信息?

感谢您花时间阅读本文,并感谢您的建议。

- 亚当

+0

我猜你的意思是全局变量可以通过类中的每个函数访问,因为这是C#标记的。我不认为有这样的想法是一个坏主意,只需要让他们在需要他们的班级中保持私密。 – IVlad 2010-07-15 15:29:24

回答

1

它应该归结为您的目标。您是否对以下产品感兴趣:

  • 学习和实践良好的风格,导致易于维护的应用程序?
  • 让项目完成并抛出代码?

这个实习项目听起来像是一个真正的客户。一旦你的实习结束后谁会保留这个应用程序?在你离开或实习结束后,谁的时间和精力将用于增强产品?

我建议坚持你的路径。你建议你有更多的时间来规划和设计。你的同事们会明白你已经投入了一些智力,甚至已经把它带到社区去获得反馈。

+0

从我听到的更高层次上来看,我主要是通过为客户提供最终演示的研究方式来完成这项工作。据我所知,客户和我的直属上司主要关注“让它变得漂亮”,因为它的iPad应用程序(并且没有理由使用其中之一,除非它非常...)。除此之外,这本质上是一个独立的研究和实验任务,希望它成为一个客户项目。 – Adam 2010-07-15 15:40:49

2

为什么不使用Singleton模式,并有这样的事情:

public sealed class CarConfigurationSettings 
{ 
    public string Make{get; set; } 

    static readonly CarConfigurationSettings instance= 
            new CarConfigurationSettings(); 

    static CarConfigurationSettings() 
    { 
    } 

    CarConfigurationSettings() 
    { 
    } 

    public static CarConfigurationSettings Instance 
    { 
     get 
     { 
      return instance; 
     } 
    } 
} 

然后在你的应用程序的任何地方,你可以去:

var make = CarConfigurationSettings.Instance.Make; 

尼斯。

+0

非常感谢。说实话,我从来没有听说过这个。但我想这与我的学校在x86和C大部分工作的领域.. 通过阅读维基文章后,似乎这可以被视为一种方式来解决整个“没有全局变量“通过简单地将所有这些放在一个班级中。这种方法是否有性能提升?看起来很有趣,看起来它可以清除我的很多代码。 – Adam 2010-07-15 16:19:57

+0

在面向对象的开发中,单例一般是非常糟糕的做法。它使测试代码变得非常困难。 尽管它听起来像是一个很酷且简单的想法,但它最终只会成为你的方式。有关此线程的更多信息:http://stackoverflow.com/questions/11831/singletons-good-design-or-a-crutch – 2010-07-16 03:02:46

+0

讨论最受欢迎(实际上大多数答案都是)答案赞成单身人士?! “辛格尔顿并不是一个可怕的模式,虽然它被滥用了很多。”只是因为人们滥用它们,并且讨论它们是否有用并不意味着它们是“非常糟糕的做法”?!那么OP的替代方案是什么?一个很好的静态帮助类,称为utils毫无疑问;) – iwayneo 2010-07-16 12:45:22

0

我会看看模型 - 视图 - 控制器(MVC)模式,其中您的视图呈现汽车/信息,模型具有基础数据,并且控制器将它们绑定在一起。然后,您可以在控制器类中清晰地保留想要创建全局的这两个变量 - 视图可以从中很好地访问它们,并且控制器可以使用它们来控制视图上显示的内容。

事实上,根据我开发iPad的经验,无论如何你几乎都会得到MVC,所以它可能只是让你的头部绕过这个结构,并且找出如何使你的设计适合它。

使用MVC模式,当您切换屏幕时,您将有不同的视图,并且您传递给它的变量可以传递到新视图的控制器中,并作为该类的成员存储。

关于“拧紧良好实践”,当您开始开发更大更复杂的软件时,您会意识到快捷键只会给您带来更大的麻烦和更长的开发时间。最好保持清洁和设计简洁,以保持复杂性。现在将是一个好时机不要打破这种习惯:)