Tag,
würde gerne eine kleine Diskussionsrunde zum genannten Thema anstoßen. Mich inteessiert welche aktuellen Technologien verwenden und in welcher Form ihr diese einsetzen würdet um eine Applikation zu erstellen, um einerseits mehrere Clients zur Verfügung zu stellen, die die Verwaltung von Daten (Eingabe, Bearbeitung, Auswertung, ...) mit umfangreicher Funktionalität (Office Anbdingung) ermöglichen, andererseits soll aber auch über eine Webapplikation (ev. etwas eingeschränkter) mehrfach zugegriffen werden können. Das Ganze soll über eine MS SQL DB realisiert werden mit Analysis und Reporting Funktionalität.
Was würdet ihr wie realisieren? Windows- und Web-Client? Oder vielleicht doch nur ein Web-Client zB. a la Visual WebGUI?
Bin gespannt,
Mike
Dafür gibts entsprechende Muster bei MS.
Schon klar, nur ist das ja nicht unbedingt immer der Weisheit letzter Schluss, und eine kleine Diskussion wäre da schon interessant.
Moin Spidermike,
da ich ebenfalls z.Z. ein neues Projekt plane hier mal mein aktueller (Planungs-)Stand bezüglich der Architektur. Geplante Techniken sind WPF, WCF, WF, LinqToSQL bzw. LinkToEntities (soll halt auch ein bischen als Einarbeitungsgrundlage für die neuen MS-Techniken dienen 😉 ).
Es handelt sich hier um die von mir geplanten Namespaces, wobei jeder Namespace immer nur den darunter liegenden Namespace sieht.
Implementierungen würden dann z.B. für den Datenzugriff wie folgt aussehen:
Die Projekte 1+2 würden jeweils eine Implementierung meiner Datenzugriffsschicht darstellen, Projekt 3 dient zur Erstellung einer Instanz für den Datenzugriff (also entweder von 1 oder 2). Und Projekt 4 exportiert die entsprechenden Schnittstellen für die zugreifenden Businesskomponenten.
Blues
"Verbringe die Zeit nicht mit der Suche nach einem Hindernis. Vielleicht ist keines da." (Franz Kafka)
Schon klar, nur ist das ja nicht unbedingt immer der Weisheit letzter Schluss, und eine kleine Diskussion wäre da schon interessant.
Dann stoße doch mal die Diskussion an und gebe deine Meinung dazu zum Besten... ich meine, ist ja nett, dass du uns so ein schönes Thema vorgibst, aber warum sollen wir durch deinen Reifen springen?
ich seh da keine reifen, und springen muss da auch keiner. es ist ok, wenn du dich nicht beteiligen willst, oder mit dem thread nicht einverstanden bist, aber einfach nichts zu posten, hätte da schon gereicht.
@blues:
sieht so aus als hättest du vor einen rich-client zu entwickeln, oder seh ich das falsch? wie sieht das bei dir mit verteilung aus? gibt es mehrere clients, und werden das windows-clients die du mit wpf designst? domain.x bedeutet dann wohl die applikationsseitige logik für dein schichtmodell.
ähnlich habe ich auch mein projekt angedacht, du bist da aber schon etwas mehr ins detail gekommen als ich. bin mir noch nicht schlüssig, ob ich generell auf web-client und web-service aufsetzen soll, oder doch auch einen windows-client mit offline-funtionalität. stellt sich die frage, ob eine reine web-lösung so viel funktionalität auch für die zukunft der applikation bietet, die ständig weiterentwickelt werden soll und an umfang zumehmen.
In der Tat sollen hier mehrere Clients unterstützt werden und auch die serverseitige Businesslogik hast Du richtig erkannt. Auf Clientseite wird ebenfalls eine Art Businesslogic implementiert. Hier soll dann z.B. schon eine Vorvalidierung stattfinden. Wie "rich" der Client wird kann ich aber noch nicht sagen, befinde mich ja auch noch in der Vorbereitungsphase (warte auf mein Visual Studio 2008 😉 )
Die Implementierung eines Web-Client sollte schon möglich sein, ist bei mir aber erst einmal nicht geplant. Aber wenn Du Deine Layer, Komponenten, etc. so weit wie möglich voneinander unabhängig machst (eigene Solutions bzw. Projekte mit sauber definierten Schnittstellen) ist eine spätere Erweiterung in Richtung Web-Client eigentlich kein Problem.
"Verbringe die Zeit nicht mit der Suche nach einem Hindernis. Vielleicht ist keines da." (Franz Kafka)
Hi!
Ich hab meine bisherigen Projekte als reine Web-Applikationen ausgeführt.
Einen Großteil davon aber noch mit PHP.
Ich bin aber vor allem was Usability, Reports, Drucken,... angeht immer wieder
auf Probleme gestoßen die sich nur schwer oder gar nicht lösen ließen.
Aus diesem Grund hab ich mich nun dazu entschlossen das nächste Projekt das ich angehe als WindowsClient oder Smartclient mit ClickOnce - Deployment auszuführen. Man kann sich mit einem WindowsClient doch um einiges mehr "austoben". Ob es zusätzlich noch einen (abgespeckten) Webclient geben wird, kann ich noch nicht sagen.
Ich werde es so machen, daß ich die Funktionen teilweise im Client verbaue und teilweise über Webservices zur Verfügung stelle. Wie das aber genau aussehen wird ist noch Detailsache.
@spidermike: welche Reporting und Analyse-Funktionen möchtest Du mit dem SQL-Server abbilden?
hast recht m@tuk, genau die selben überlegungen habe/hatte ich auch ... obwohl rein von der benutzeroberfläche her sicher auch die webclient schon sehr nahe am windows client sind (wie das bereits erwähnte visual webGUI), aber aussehen alleine ist eben doch nicht alles 😉
es geht generell in meiner anwendung stark um analyse, also data mining, und auch reporting, also tägliche reports sowie monats-reports usw. es soll erstmal ein set an analyseprozessen und reports erstellt werden, und diese dann ständig erweitert. denke der sql server bietet ab der version 2005 ein super basiskonzept wo alles drin ist, was man für eine analyse- und reportinglandschaft braucht.
hab zwar noch wenig erfahrung mit ms sql server in diesem bereich, aber erhoffe mir sehr viel davon.
ich steh vor einer ähnlichen Entscheidung, RichClient als WinForms Anwendung oder WebForm Anwendung.
Bis her habe ich nur eine WinForm Anwendung in Verbindugn SQL Server 2005 erstellt. Aber ich sehe es doch richtig das man sich bei einer Web Anwendung nicht nur mit C# ADO.Net "rumschlagen" muss sondern auch um JavaScript, CSS und HTML. So hatte ich es auf jedenfall bei einigen WEbCast gesehen.
Und die Performance im WebClient war ist selbst bei den Demos von DevExpress nicht so dolle, deren Grids setzte ich auch in meiner WinForms Anwendung ein.
Vorteil der Web Anwendung ist bei uns in den Diskussionen immer, Client benötigt kein .NET, kann auch Linux sein und das Deploying wäre "einfach" also auf jeden fall zentral.
Oder habe ich da falsche Vorstellungen?
Hallo spidermike,
vielleicht möchtest Du Dir mein Beispiel zum Thema Verteilte Anwendungen ansehen: .NET Applikationsserver
Natürlich ist auch dieses n-Tier-Beispiel nicht der heilige Gral, aber es eignet sich gut als Studienobjekt.
Ich bin gerade dabei dieses Beispiel auszubauen. Bei mir auf dem Rechner läuft auch schon ein ASP.NET Webclient dafür. Ich möchte damit zeigen, wie man eine Anwendung so aufbauen kann, dass die Haupt-Geschäftslogik von beliebigen Clients genutzt werden kann. Wie man an folgendem Code sehen kann (wenn man sich den Code für den Windows.Forms-Client auch angesehen hat), können die selben Dienste und im wesentlichen das selbe Programmiermodell auch beim Web-Client verwendet werden (Da HTTP statuslos ist, muss der Sitzungskontext vor jedem Aufruf wiederhergestellt werden; Aber vielleicht weiss ja einer der ASP.NET-Götter einen Trick, der das überflüssig macht):
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Rainbird.AppServer.API;
using Rainbird.Examples.NTier.ArticleMaster.Contracts;
namespace Rainbird.Examples.NTier.Web.ArticleMaster
{
/// <summary>
/// ASP.NET Client Test: Produktsuche.
/// </summary>
public partial class FindProductForm : System.Web.UI.Page
{
/// <summary>
/// Wird aufgerufen, wenn die Seite geladen wird.
/// </summary>
/// <param name="sender">Herkunftsobjekt</param>
/// <param name="e">Ereignisargumente</param>
protected void Page_Load(object sender, EventArgs e)
{
// Wenn es kein Postback ist ...
if (!IsPostBack)
{
// Wenn der Webserver sich erfolgreich am Applikationsserver anmelden konnte ...
if (ApplicationServer.Logon(Properties.Settings.Default.ServerURL))
{
// Applikationsserver Sitzung im Sitzungsstatus speichern
ApplicationServer.SaveContextDataInWebSessionState(this);
}
}
}
/// <summary>
/// Wird beim klicken auf den Suchen-Knopf ausgeführt.
/// </summary>
/// <param name="sender">Herkunftsobjekt</param>
/// <param name="e">Ereignisargumente</param>
protected void _findProductNoButton_Click(object sender, ImageClickEventArgs e)
{
// Suchmuster aus Textbox lesen
string pattern = _findProductNoBox.Text;
// Applikationsserver-Kontext aus ASP.NET-Sitzungsstatus wiederherstellen
ApplicationServer.LoadContextDataFromWebSessionState(this);
// Verbinding zum Artikelverwaltungsdienst herstellen
IArticleMasterService proxy = ServiceFactory<IArticleMasterService>.CreateProxy();
// Produkte anhand der Produktnummer suchen
DataTable result=proxy.FindProductsByNumber(pattern);
// Suchergebnisse anzeigen
_grid.DataSource = result;
_grid.DataBind();
}
}
}
So sieht mein erster ASP.NET Gehversuch aus (Das ist wirklich meine erste ASP.NET Seite). Das Grid ist noch unformatiert, deshalb die GUIDs. Ist eben noch nicht fertig.
hi rainbird ... thnx für den link, hab deinen thread schon vorher gefunden 😉
wie geht's da jetz eigentlich weiter?
nö nbong, die überlegung trifft wohl jeder der vor so einer aufgabe steht, und deployment ist ein teil davon ... gar nicht so einfach das ganze 🙂
wie geht's da jetz eigentlich weiter?
Das Architekturbeispiel entwickle ich weiter. Da ich nur in meiner Freizeit ab und zu daran arbeiten kann, dauert es natürlich immer etwas, bis ich Neuerungen veröffentlichen kann. Die Qualität soll ja auch stimmen.
Momentan sind folgende Erweiterungen in Arbeit oder zumindest geplant:*Eine vollständige ASP.NET Weboberfläche *Eine Version, die statt Remoting WCF als Kommunikationstechnologie verwendet *Gruppierung von Diensten in Applikationen (Pro Applikation eine eigene AppDomain)
Hallo Rainbird
Da HTTP statuslos ist, muss der Sitzungskontext vor jedem Aufruf wiederhergestellt werden; Aber vielleicht weiss ja einer der ASP.NET-Götter einen Trick, der das überflüssig macht):
Nein, gibt es nicht. Das ist eine Tatsache die auf dem Protokoll basiert, und nicht änderbar.
Für deine erste Seite ist das ja ziemlich nett.
Aber - nicht böse sein - sieht es für mich so aus, als wolltest du eine Windows Forms Anwendung schreiben 🙂 (Musstest du natürlich im weitesten Sinne auch, um die anderen Layers zu benutzen).
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Hallo Peter,
der Beitrag ist zwar schon etwas älter, aber ich bin gerade wieder darüber gestolpert.
Aber - nicht böse sein - sieht es für mich so aus, als wolltest du eine Windows Forms Anwendung schreiben 🙂 (Musstest du natürlich im weitesten Sinne auch, um die anderen Layers zu benutzen) Meine Dienste sind ebenfalls statuslos (Bis auf den Sicherheitsdienst, der Sitzungsinformationen speichert, damit nicht bei jedem Zugriff eine komplette Sicherheitsprüfung durchgeführt werden muss). Deshalb sind sie eigentlich nicht an die Arbeitsweise von Windows.Forms Clients gebunden.
Was ist den an meiner ASP.NET-Vorgehensweise verbesserungswürdig? Ich lasse mich da gerne belehren.
Hallo Rainbird
Okay, alles klar 🙂
Ich weiss nicht was mich da geritten hat, klar kannst du deine Layers so benutzen.
Zu deinem ASP.NET Vorgehen kann ich so nichts sagen, ich müsste mehr sehen.
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011