2014-02-18 23 views
4

我正在設計一個調查工具。調查將是非常靜態的,因此,我可以避免建立某種桌面驅動的調查設計師來調查調查中的167個問題(在收音機盒或複選框佈局中所有1-5個評分問題)。使用除xml以外的應用程序數據結構

我在考慮在一個大的XML文件中構建調查問題,但我的非技術人員會頻繁地對調查進行編輯,這可能會破壞原始XML的完整性/有效性文件(認爲標點符號和特殊字符)。

XML文件可能看起來像:

<questions> 
    <question> 
     <type>checkbox</type> 
     <text>Which beers do you like most</text> 
     <choices>Bud,Miller,Piels</choices> 
     <Required>true</Required> 
    </question> 
    <question> 
     <type>radio</type> 
     <text>Which beer is your favorite</text> 
     <choices>Bud,Miller,Piels</choices> 
     <Required>true</Required> 
    </question> 
</questions> 

請用你的想象力,這種結構將更爲複雜一點,將有165多個問題。

複雜的事情,我需要以某種形式的面向對象的佈局來解決這些問題,以便我可以將結果與其他東西對齊。我考慮過用167個問題對一個非常冗長的調查表進行硬編碼,但我需要將這些數據分塊,以便我可以解析出問題37並將其與其他功能中的其他功能進行對比,這與問題37有關。

這是我想在.NET應用程序做什麼:

  1. 定義枚舉類此。
  2. 做一些事情,我可以手動使用我需要的所有數據填充此類的可枚舉集合。使用我的.asp世界中熟悉的p代碼。 。 。

    questions q = new questions() 
    
    q.type = "checkbox"; 
    q.text = "which beers do you enjoy"' 
    q.choices = "Bud,Miller,Peils"; 
    q.required = true; 
    q.add 
    
    q.type = "radio"; 
    q.text = "what is your favorite beer"; 
    q.choices = "Bud,Miller,Peils"; 
    q.required = true; 
    q.add 
    

我希望這個cs文件(儘管國外找外行的人)會更容易爲我的同事來維持,沒有我不必擔心語法錯誤。

所以,我想我在尋找一些反饋:

  1. 這只是一個愚蠢的想法。我應該用XML來做這件事,我只需要使用XML文件並完成它。

  2. WWYD - 你會做什麼?有沒有更簡單的方法來做到這一點?

    • 我不關心性能,因爲相對較少的用戶正在使用它。
    • 我不關心可維護性,因爲我們會在夏天正確編寫這個功能。
    • 我只需要創建一個數據結構,該數據結構不在數據庫中,並且可以由非技術人員使用文本編輯器(現在)來維護。

如果有人做了這一步,我很感激。

+2

花5分鐘解釋XML是如何工作的,而且你很好。另外,也許在使用它之前定義一個XSD並驗證XML。在我看來,XML方式是最簡單的解決方案。更改代碼文件是一個壞主意。因爲每次編輯或新調查都需要編譯;而使用「外部數據源」(XML)則可以加載調查。 – Styxxy

+1

- 或者創建一個視覺設計師。 - 但是,XML是要走的路。如果您提供XSD,您的同事可以使用提供Intellisense(自動完成)和語法驗證功能的Visual Studio(或任何其他支持XML的編輯器,如Altova)。 –

+0

我沒有想到XSD。好主意啊。 – user2177720

回答

1

由於永久存儲XML很好。
但這並不意味着用戶需要直接編輯XML。
我將構建編輯,添加和刪除應用程序中問題的功能。
是的有點麻煩,但如果他們破解XML,那麼這也是一個很大的麻煩。

你打算如何保存調查結果?
你打算如何收集調查結果?
這個項目比您意識到的還要多。
您是否需要結合來自多個設備的結果?
如果有多個設備,則需要將問題與結果分開,以便您可以在多個設備上更新問題。

有工具可以讀取和寫入XML到磁盤。
Reading XML with the XmlReader
我不同意道格需要嵌入數據庫。
對於少數問題,我會使用XML。
我會將所有的XML讀入對象集合(A List)。
你不需要一個實現IEnumerable的類。
您將對象放入實現IEnumerable的集合中。

我會去WinForm的WPF。
帶有DataTemplate的ListBox。
在DataTemplate上,您可以在代碼後面有一個動態選擇器,但這是一個真正的無形。
考慮一下您在代碼後面操作的單個模板。
所以他們不是RadioButtons,但你取消選中代碼後面的其他人。
爲了過濾我會去公共屬性中的LINQ,但也有CollectionViewSource。

將XML用於用於收集現場測量的應用程序。
很多這樣的測量設備可能會改變,需要收集測量數據。

如果您設置了用戶直接編輯問題,那麼帶XSD的XML是我能想到的最好的。

+2

我不同意你:「WPF over WinForms」。 WPF的學習曲線比WinForms更陡峭。 – Measuring

+0

@Measuring他是.NET的新手,來自ASP背景。好不好。 – Paparazzi

+0

ASP和WPF不一樣。因爲他是.NET新手,我不會建議更復雜的框架。 – Measuring

1

如果您正在尋找一種簡單易讀的結構化格式,那麼您可能會被YAML採訪。

YAML是人可讀的數據的序列化格式,將來自編程語言,如C,Perl和Python,概念 和想法 XML和電子郵件的數據格式。

你的問題的文件應該是這樣的:

questions: 
    - id:  1 
    type:  checkbox 
    text:  Which beers do you like most 
    choices: Bud,Miller,Piels 
    Required: true 

    - id:  2 
    type:  radio 
    text:  Which beer is your favorite 
    choices: Bud,Miller,Piels 
    Required: true 

一些YAML庫存在於.NET(文章):

https://github.com/aaubry/YamlDotNet

http://yaml.codeplex.com/

http://www.codeproject.com/Articles/28720/YAML-Parser-in-C

http://yaml-net-parser.sourceforge.net/

2

每個人都使用Excel的......所以請考慮使用它可以由你閱讀以及你的對手將會使用哪一個Excel的CSV格式。必須向用戶指定列不能改變,這不是一個缺點,但用戶將動態變化導出到程序讀取並驗證的CSV文件中。

此外,用戶不必經過培訓即可使用Excel,因此,根據您的要求不使用XMl,這是雙贏的情況。

+2

-1這不符合OP對數據格式和正確性的擔憂。 Excel工作表不保證任何類型的數據正確性,也不是表示層次結構的最佳方式。 –

+3

@HighCore如果規則是不能使用XML ...還有什麼其他選擇?結構化數據。祝你好運。如果用戶必須使用工具,Excel比某些開發工具更好,用戶可以*理解*如何在沒有培訓的情況下使用它。恕我直言 – OmegaMan

+1

一個Excel工作表,其**足夠複雜**,以便它可以正確地建模和表示OP所需的**等級**數據結構,還需要對用戶進行培訓。我敢說,即使是一個可編輯的WPF TreeView比Excel工作表更好。 –

0

這裏有兩個答案;

a:編寫它以允許適當的管理界面,使用數據庫允許管理員用戶添加/編輯問題,響應選項幷包括適當的安全性,審計等。您提到這在短期內可能不可行或者即將添加「正確」功能,在這種情況下,請取消此功能! b:人們說他們頻繁地進行了編輯/修改,但這不是一個與完整功能相關的需求嗎?您是否可以在短期內接受通過電子郵件或其他文件記錄的人工變更請求,並自行製作它們?你認爲添加問題/響應或更改一些措辭的時間會少於需要手動解析XML以找到不熟悉的人的語法錯誤嗎?

您需要權衡變化的頻率以及對用戶錯誤發生變化與可能性的影響,以及識別和解決語法錯誤所需的估計時間(以及可能的變更錯誤意願打破事情)。 儘管有人認爲,用戶不喜歡犯錯誤!將他們置於一個對管理層具有管理權限的位置,這樣他們就沒有完全的技術把握,這可能會降低您對將要開發的功能的信心和未來購買意願。

TLDR;在我看來,除非它是一個重大的麻煩,否則短期內可能會做出自己的改變,也許最大限度地讓你做出改變(例如,我在一個星期五做了一個改變,例如星期五)。保持系統完美運行,讓用戶參與,而不會讓他們處於一個不自願的早期採用者的不適當位置,因爲這是未完成的功能。

0

我用我對winforms的完整掌握創建了一個小模擬GUI應用程序,使用戶能夠快速創建一個具有不同問題類型的問題的一維非條件列表。

一旦你決定了一個XML模式,你可以輕鬆地導入和導出XML文件。

您是否有興趣進一步發展神奇的調查創造者?如果這樣告訴我,明天早上我會送你一個幾乎完成的原型。 (儘管你應該提供給我一個xml方案,否則我會用CSV來做)
我喜歡這個練習。
圖片相關。不要被顏色拖延,這就是我在開發過程中喜歡的方式,看到像素控件的精確邊界。

除非你的同事有編程或xml編輯的經驗,否則他們會討厭你,如果你指示他們編輯任何類型的「代碼」。
當我告訴他們如何操作VBA宏時,我們的祕書把他們的手放在他們面前,並開始念頌「不,不,不......」。

enter image description here

+0

我們正在快速收費,現在看起來越來越像現在我們將與XML戰鬥(所有的原始編輯挑戰),然後我們將使用MVC/Razor來渲染表單並保存結果。 – user2177720

1

有大量的XML編輯工具,在那裏實際上將使其更容易比直接編輯一個文本文件編輯。我使用XML Marker,使用起來非常簡單。 http://symbolclick.com/

培養他們使用工具進行編輯比創建一個更快。