Ceci est très possible avec CSLA. La principale différence avec l'utilisation de votre BLL avec différentes technologies d'interface utilisateur est l'utilisation du mécanisme de rappel Begin & des appels de portail de données dans CSLA pour Silverlight. Si vous utilisez ce mécanisme pour toutes vos technologies d'interface utilisateur, cela vous permettra d'utiliser la même BLL.
Je suggère que vous utilisiez des objets Factory distincts pour votre BLL afin que vous puissiez décider quand utiliser le mécanisme de rappel BeginInvoke & et que vos objets métier ne seraient pas touchés.
Vous pouvez également créer des méthodes d'usine dupliquées si vous le jugez nécessaire. Par exemple, si vous aviez un objet métier de client:
public class Customer : Csla.BusinessBase<Customer>
{
private Customer() { }
private void DataPortal_Fetch(SingleCriteria<Customer, int> criteria)
{ // populate here }
}
alors vous pourriez avoir un objet CustomerFactory qui contenait les deux méthodes pour Silverlight et les autres technologies de l'interface utilisateur:
public static class CustomerFactory
{
// Handle most UI needs
public static Customer Fetch(int id)
{
return DataPortal.Fetch<Customer>(new SingleCriteria<Customer, int>(id));
}
// Handle Silverlight needs
public static void Fetch(int id)
{
DataPortal.BeginFetch<Customer>(id, FetchCallback);
}
private static FetchCallback(object sender, DataPortalResult<Customer> result)
{
// notify the UI of result.Object
}
}
Vous pouvez également obtenir un peu plus intelligent et implémentez l'injection de dépendance via un conteneur IoC pour rendre l'appel à vos méthodes d'usine un peu plus intelligent.
L'essentiel est que vos objets métier réels ne changeront pas mais que vos objets d'usine peuvent avoir des méthodes CRUD en double dans certaines circonstances.
Rocky a fait un échantillon (ProjectTracker) qui met en œuvre une seule BLL avec plusieurs couches d'interface utilisateur sur son site Web (figurant sous 'échantillons' à http://www.lhotka.net/cslanet/Download.aspx)
Est-ce que le même mécanisme doit appliquer les méthodes ci-dessous ... classe Client {public static client Créer() { retour DataPortal .Créer(); } public static void Supprimer (Guid customerID) { DataPortal.Delete (nouveau SingleCriteria (customerID)); } } –
"Les différences sont principalement dues à la nature asynchrone de la programmation Silverlight et à la nature plus synchrone de la programmation .NET traditionnelle Si vous souhaitez appliquer les mêmes conceptions asynchrones à votre .NET mise en œuvre, vous pouvez atteindre 99% ou 100% de partage de code entre les deux plates-formes. " à partir de http: //www.silverlight-travel.com/blog/2008/11/29/csla-net-for-silverlight/ –
@Anand - Oui, toute méthode d'usine, ce modèle serait appliqué à. C'est une citation très précise et excellente dans votre deuxième réponse. –