Difference between revisions of "System Architecture"

From Heureka Wiki
Jump to navigation Jump to search
Line 117: Line 117:
 
Static classes and singletons should never be used, with the <tt>ServiceManager</tt> as the single exception to this rule.
 
Static classes and singletons should never be used, with the <tt>ServiceManager</tt> as the single exception to this rule.
  
=== Persisting Data ====
+
=== Persisting Data ===
 +
 
 +
The system uses both the file system and RDBMS:s (SQL Server) to store data.
 +
 
 +
* Forest data (stand registers, inventory data, GIS data, treatment units etc) are stored in a RDBMS, the "ForestDb"
 +
* Calculated results and optimization results (plans) are stored in another RDBMS, the "ResultDb"
 +
* Project information and templates are stored in the file system (typically in the user's document folder)
 +
* Application configuration is stored in the file system (typically in the user's application data folder)
 +
 
 +
Storgate to files are mainly done via serialization. However, a major drawback with serialization is that versioning can be a problem. Also, performance can be an issue. The subsystem <tt>Slu.Heureka.BaseLayer.SerializationManagement</tt> provides helper classes to resolve some of these issues. The classes <tt>SerializationReader</tt> and <tt>SerializationWriter</tt> improves performance drastically. A recommended practice is to always serialize a version number first. By doing this, deserialization of different versions can easily be implemented. A different problem is when a class changes its name or becomes obsolete. A solution for that problem has not been implemented in the Heureka system, but it should be possible to do it using the <tt>[[http://msdn.microsoft.com/en-US/library/system.runtime.serialization.serializationbinder|SerializationBinder]]</tt> class in the .Net framework.
 +
 
 +
For simple configuration data, the class <tt>ConfigurationStore</tt> should be used.
 +
 
 +
For control tables, a helper class that serializes control tables has been developed. Thus it is not necessary to implement serialization for control tables.
 +
 
 +
For interaction with RDBMS the following techniques are used:
 +
;Data readers: For fast loading of objects, mainly used for forest data
 +
;Typed data sets: Used when the user is updating data
 +
;Custom OR-mappning: Used for the result database
  
System utnyttjar både filer och relationsdatabaser (SQL Server) för att lagra data.
 
 
 
 
 
 
Samtliga filer lagras som default i användarens dokumentkatalog. På så sätt kan flera användare använda samma dator men ha sina egna inställningar.
 
Vid lagring i databas används typade dataset och/eller data readers. Vanligtvis används typade dataset för att underhålla informationen men data readers för att snabbt läsa upp informationen under beräkningar etc.
 
Lagring i filer sker i stor omfattning genom serialisering av objekt. Enklare inställningar lagras och läses genom klassen ConfigurationStore. För styrtabeller används en hjälpklass för serialisering så att kod för serialisering inte behöver implementeras i varje styrtabell.
 
Serialisering har visat sig vara ett mindre lyckat designval eftersom det försvårar refactoring. På sikt bör serialisering byggas bort från systemet. ConfigurationStore och serialiseringen av styrtabeller fungerar däremot bra.
 
 
=== Error Handling ===
 
=== Error Handling ===
 
När någon typ av fel upptäcks ska ett exception kastas. Inbyggda exceptions ska användas om de passar (till exempel ArgumentException, ArgumentNullException och InvalidOperationException). I annat fall används egna exceptions som ska ärva från ApplicationException.  
 
När någon typ av fel upptäcks ska ett exception kastas. Inbyggda exceptions ska användas om de passar (till exempel ArgumentException, ArgumentNullException och InvalidOperationException). I annat fall används egna exceptions som ska ärva från ApplicationException.  

Revision as of 14:31, 20 May 2010