2010-07-15 96 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模式,當您切換屏幕時,您將有不同的視圖,並且您傳遞給它的變量可以傳遞到新視圖的控制器中,並作爲該類的成員存儲。

關於「擰緊良好實踐」,當您開始開發更大更復雜的軟件時,您會意識到快捷鍵只會給您帶來更大的麻煩和更長的開發時間。最好保持清潔和設計簡潔,以保持複雜性。現在將是一個好時機不要打破這種習慣:)