Laden...

Forenbeiträge von IsaakTaylor Ingesamt 16 Beiträge

08.09.2008 - 10:32 Uhr

Hallo,

mich würde interessieren in was MS programmiert - Office, XP, Vista, DBMS... denke nicht dass da vollständig .Net eingesetzt wird. Wird da noch das alte Visual C++ verwendet???

Grüße

12.08.2008 - 09:22 Uhr

Okay, danke. Mal sehen wie ich jetzt weiter verfahre. Entweder behalte ich die Struktur bei und mache weiter (da ich mit AOP, Unitests, Localisierung...) eh noch viel neues habe oder ich überarbeite alles noch mal.

Werde in diesem Fred bestimmt noch die ein oder andere Frage zu dem Projekt stellen.

Grüße Isaak

12.08.2008 - 08:54 Uhr

Aber so wie deine BO's aussehen, machst du wahrscheinlich die Validierung auch in der UI, statt in den BO's.

Hast du mir nen Link - oder ein Link für ein Buch in dem solche Dinge beschrieben werden?

In so typischen Büchern ist die Sprache beschrieben, aber weniger die Konzepte wie eine Anwendung aufgebaut sein muss.

@herbivore
Echt, das hab ich nicht gewusst. Wie gesagt, ich bräuchte da einfach ein wenig Info. Links?

Danke an alle für die Hilfe bisher!

11.08.2008 - 13:21 Uhr

kommt mir ausgesprochen merkwürdig vor. Irgendwie scheinst du ein ganz anderes Bild vom Schichtenmodell zu haben, als üblich. Business Objects = Modell.

Kann sein dass ich da ne andere Aufwassung habe. Die Bussines Objects sehen bei mir so aus:

public class Vocable
	{
		protected String id, german, english, wordType, synonym, opposite, description;
		
		public Vocable()
		{
			this.id = "0";
			this.german = "";
			this.english = "";
			this.wordType = "";
			this.synonym = "";
			this.opposite = "";
			this.description = "";			
		}
			
		public string Id
		{
			get { return id; }
			set { id = value; }
		}...

Die BO sind also ziehmlich primitiv und dumm, nur getter und setter.

Während das Model die Logik, die Data-Source-Zugriffe enthält und die Business Objects verwendet.

 public class SQLiteVocableDAO : IVocableDAO
   {
      // The current connection, from die SQLiteFactory
      protected SQLiteConnection connection = null;

...

      public void ChangeVocable(Vocable vocable)
      {
         using (SQLiteCommand command = new SQLiteCommand())
         {
            command.Connection = connection;
            command.CommandText = "UPDATE vocable SET german='" + vocable.German + "', english='"+ vocable.English +"', wordType='"+ vocable.WordType +"', synonym='"+ vocable.Synonym +"', opposite='"+ vocable.Opposite +"', description='"+ vocable.Description +"' WHERE ID=" + vocable.Id + ";";
            command.ExecuteNonQuery();
         }
      }  

...
11.08.2008 - 09:17 Uhr

@herbivore
Okay, in dem Fall werde ich mich nicht exakt an das Pattern halten. Ich finde es sinnvoller die Business Objects nicht zum Model zu betrachten, sondern zu allen Schichten.
Denn ich habe keine Lust getter und setter für alle Eigenschaften der Business-Objects zu schreiben und diese in die Schnittstelle der View einzubauen. Ich finde das macht den Code unübersichtlich, ein einfaches SetData(BusinessObject object) ist da viel eleganter.

Dass ich das Model im Presenter instanziiere ist wohl in meinem Fall die beste Lösung, oder?

08.08.2008 - 16:28 Uhr

@IsaakTaylor:
Und wie kann der View mit dem Presenter Kommunizieren?
Im Moment greift dein View direkt auf das Model zu, soll er aber eigentlich nicht.

Nein!

Das Model holt Daten aus einer Datasource, in dem Fall eine DB. Die Daten werden in BusinessObjects gespeichert. Diese Business Objects haben nichts mehr mit dem Model zu tun. Diese werden dann an die View weiter geben.

Tausche ich nun die Datenbank oder die komplette Datasource aus. Bleiben dennoch die BusinessObjets bestehen.

08.08.2008 - 12:00 Uhr

Allerdings ist deine implementierung etwas Suboptimal.

I.A. wird es so gemacht, das der View und der Presenter sich gegenseitig als
Interface "kennen", um miteienader zu agieren.

Okay, an welcher Stelle genau, ich weiß nicht wo du das genau meinst? Denn der Presenter hat eine Referenz der View, und über das zugehörige Interface kommunizieren diese doch.

Grüße

08.08.2008 - 10:42 Uhr

@Jabe

  1. Verwende Passive View
  2. ES FUNKTIONIERT, steht ja auch unten dran. Ich wollte doch nur wissen ob ichs korrekt umgesetzt habe.

Grüße

08.08.2008 - 10:40 Uhr

Hallo!!!

... Hier ist mein Code, findet mir die Fehler (die da evtl. drin sind).

Da sind keine Fehler, der Code funktioniert, das habe ich auch geschrieben!

Zum Anderen gibt es soviele Varianten von MVC und MVP, dass man kaum von richtig und falsch sprechen kann.

Na ja, zwischen MVC und MVP gibt es einen wesentlichen Unterschied, nämlich die Schnittstelle. Ich habe das aus dem folgenden Fred nachprogrammiert: MVP für WindowsForms
In dem warst du doch auch aktiv.

Sollte man nicht eigentlich, view und model an den presenter übergeben?
Ja, so wie ich MVP verstehe, kennt der Presenter das Modell und das View und die beiden letzteren kennen sich untereinander nicht (zumindest bei Passive View).

Vielleicht könntest du ja doch kurz in den Code schauen. Denn das Model an den Presenter zu übergeben hat IMO keinen Sinn.

Grüße!!!

07.08.2008 - 12:12 Uhr

So, da es sich oben um ein CustomControl handelt (UserControl) hier die Verwendung:

		void MainMenuVocabularyAddClick(object sender, EventArgs e)
		{
		   VocabularyEditorView view = new VocabularyEditorView();
		   VocabularyEditorPresenter presenter = new VocabularyEditorPresenter(view);
		   this.panelMain.Controls.Add(view);
		}

Sollte man nicht eigentlich, view und model an den presenter übergeben? Passt dass soweit oder habe ich Fehler drin? Funktionieren tuts, aber ich möchte dass alles wirklich korrekt umgesetzt ist.

07.08.2008 - 11:46 Uhr

Hallo,

da ich C# und .Net kennen lernen wollte, dachte ich mir ich entwickele eine Anwendung, ich habe mich für einen Englisch-Trainer entschieden, der eine DB enthält (SQLite), ich wollte möglichst viel neues kennen lernen, deswegen verwende ich das erste Mal Unit Test mit NUnit, MVP, strikte Trennung von Data Layer, Business Layer und Presentation Layer, dazu verwende ich DAO-Pattern...

Hier meine Implementierung für das MVP-Pattern, ist das so richtig?

Model


/// <summary>
/// This business object, represents a single vocable dataset
/// </summary>
public class Vocable
{
   protected String id, german, english, wordType, synonym, opposite, description;
   // es folgen getter und setter für die protected variablen...
}

/// <summary>
/// This interface defines all requiered methods for the concrete Data Access Objects e. g. SQLiteVocableDAO.
/// </summary>
public interface IVocableDAO 
{	    
       // Dieses DAO-Objekt habe ich implementiert, es greift auf die DB zu, enthält SQL-Befehle
	String GetNewId();	   
	String GetMinId();
	String GetMaxId();
	
	String GetNextSmallerId(String id);
	String GetNextBiggerId(String id);
	
	Vocable GetVocable(String id);
	void SetVocable(Vocable vocable);
	
	void RemoveVocable(String id);
	bool ExistVocable(Vocable vocable, Language language);
}

View


   public class VocabularyEditorView : UserControl, IVocabularyEditorView
   {
      #region Controls
      Vocable vocable = new Vocable();
      private System.ComponentModel.IContainer components = null;
      private System.Windows.Forms.TextBox txtEnglish, txtGerman, txtOpposite
      ...
      #endregion

      public VocabularyEditorView()
      {
         InitializeComponent();
      }
      
      protected override void Dispose(bool disposing)
      {
        ...
      }
      
      private void InitializeComponent()
      {
         ... 
      }
      
      public Vocable CurrentVocable
      {
         get
         {
            return this.vocable;
         }
         set
         {
            this.vocable = value;
            this.txtGerman.Text = value.German;
            this.txtEnglish.Text = value.English;                     
         }
      }

   public interface IVocabularyEditorView
   {
      Vocable CurrentVocable {set; get; }
   }



Presenter


   public class VocabularyEditorPresenter
   {
      public VocabularyEditorPresenter(IVocabularyEditorView view)
      {
         view.CurrentVocable = this.GetFirst();
      }
      
      public Vocable GetFirst()
      {
         Vocable vocable;
		   using (SQLiteFactory factory = (SQLiteFactory)DAOFactory.GetDAOFactory(DataSourceType.SQLite))
		   {			
		      factory.GetConnection();
		      IVocableDAO ivocableDAO = factory.GetVocableDAO();      
		      vocable = ivocableDAO.GetVocable(ivocableDAO.GetMinId());
		      factory.CloseConnection();
		   }   
	 return vocable; 
      }
   }

05.08.2008 - 11:24 Uhr

Hallo,

bin jetzt mit meinem IT-Studium fast fertig. Ich schreibe mir recht gerne Zusammenfassungen für aktuelle Themen, z. B. wollte ich mich gründlich in C# einarbeiten und mir dazu ein Script schreiben. Macht ihr sowas auch? Schließlich kann man sich ja vieles gar nicht merken, ist einfach zu viel. Wie handhabt ihr dies? Im alten Quellcode nachsehen? E-Books? MSDN?

Grüße

23.07.2008 - 16:11 Uhr

Kann es sein dass bei PostSharp die Klassen - die die Aspektmethoden verwenden sollen, alle von OnMethodBoundaryAspect erben müssen?

Ich habe aber schon an vielen Stellen im Programmcode Vererbung verwendet, d. h. ich kann dort keine AOP mehr nutzen??? Oder hab ich da jetzt was falsch verstanden?

23.07.2008 - 15:37 Uhr

Hallo,

ich arbeite mich gerade in Loom.Net ein. Habe ich das richtig verstanden, dass das Vernetzen der Aspektmethoden mit den Zielmethoden über den Waver geschieht?

Ich habe bereits eine teilweise fertige Anwendung und würde gerne an vielen Stellen einen Logger einbauen. Viele Objekte werden bereits mit new erstellt. Müsste ich nun diese wie folgt abändern

IClient client2 = Weaver.Create<Client>("John",100);

um AOP nutzen zu können?

LG

23.07.2008 - 12:46 Uhr

Hallo!!!

Der Titel sagts bereits. Ich möchte AOP verwenden, welches der beiden Tools ist besser, Erfahrungen, Meinungen??? Sind beide in SharpDevelop und VS 08 einsetzbar, zusammen mit NUnit?

Testet man auch Aspektmethoden mit NUnit, geht das? Wäre ja eigentlich sehr sinnvoll.

LG