2013-06-02 4 views
0

Il existe du code dans un code d'application Web ASP.NET derrière la classe que je souhaite réutiliser dans une application VB.NET WinForms. S'il vous plaît voir le code ci-dessous à partir du code derrière (application Web ASP.NET (pas de site Web)):VB.NET - Réutilisation du code derrière le code

Public Class _Default 
    Inherits System.Web.UI.Page 

    Private Sub button1_Click(sender As Object, e As System.EventArgs) Handles button1.Click 
     MsgBox("button1.click") 
    End Sub 
End Class 

et le code derrière:

Imports WebApplication1 

Public Class TestClass 
    Public Shared Sub Test100() 
     MsgBox("button clicked on page") 
    End Sub 
End Class 

Public Class Form1 

    Public Event BellRings(ByVal sender As Object, ByVal e As EventArgs) 
    Public test As String 

    public Shared TestMethod() 
     MsgBox("Test Method was called") 
    End public 

    Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load 
     Try 
      Dim d As WebApplication1._Default = New WebApplication1._Default 
      AddHandler d.button1.Click, AddressOf Form1.TestMethod 
     Catch ex As Exception 

     End Try 
    End Sub 
End Class 

Je me rends compte que ce serait sans doute préférable de créer une couche de service, que les deux clients utilisent, mais je suis errant si ce qui précède est même possible? c'est-à-dire qu'il est possible d'ajouter un gestionnaire d'événement dans un formulaire WinForm pour un événement dans une application Web, c'est-à-dire un bouton.

Répondre

3

Vous pourriez potentiellement sortir avec ceci à travers l'utilisation créative des classes partielles et en référençant la classe code-behind de l'application winforms.

Cependant, ce serait une implémentation très fragile. Par exemple, si vous souhaitez fournir la même fonctionnalité via un menu ou si vous voulez que le contrôle du bouton soit remplacé par le contrôle d'un fournisseur tiers qui n'a pas la même signature que le contrôle WinForms ou vice versa.

Une meilleure approche, même sans la couche de service, consisterait à déplacer la fonctionnalité commune dans une classe partagée entre les deux applications et simplement appelée depuis le gestionnaire d'événements.

Oui, vous devrez définir des gestionnaires d'événements dans les deux applications, mais il s'agit d'une quantité de code triviale et vous permet également de gérer les erreurs spécifiques à la plateforme (par exemple, dans l'application Web, vous pouvez afficher l'exception via une alerte javascript alors que dans l'application winforms, vous pouvez l'afficher via un msgbox).

+0

Merci. +1 Pouvez-vous clarifier ce que vous entendez par: "même sans la couche de service". Ce que vous avez écrit semble impliquer une couche de service. – w0051977

+0

En outre, j'ai posé une question sur l'utilisation de différents modèles (pour éviter de faire ce que j'ai suggéré dans l'OP). Dans le cas où vous avez le temps, la question est ici: http://codereview.stackexchange.com/questions/26769/mixing-fowlers-patterns – w0051977

+0

Désolé. Pour clarifier, ce que je voulais dire, c'est de partager les fichiers de code entre les applications, sans implémenter une autre application qui fournit la fonctionnalité indépendamment aux deux applications. Dans Visual Studio, vous pouvez ajouter une référence à un fichier de code en sélectionnant Ajouter un élément existant ... dans le menu Projet, puis en cliquant sur la flèche vers le bas à côté du bouton Ajouter et en sélectionnant Ajouter en tant que lien. De cette façon, vous avez exactement le même code dans les deux applications qui, lorsqu'elles sont modifiées, sont automatiquement modifiées dans l'autre. –