2009-08-22 13 views
25

Me gustaría saber: ¿se utilizan GoF patrones de diseño en el .NET Framework?¿Hay algún patrón de diseño utilizado en .NET Framework?

Recompensa:

he visto el enlace de MSDN continuación en una respuesta. ¿Hay alguna publicación/video o puede enumerar los patrones y, lo que es más importante, DONDE se usa?

+1

Esto puede servir como una lista de patrones de diseño utilizados en la red. Estoy bien haciendo esto como wiki si sirve al interés de esta pregunta – Sandbox

+6

Probablemente todos los patrones GoF – Paco

Respuesta

21

He aquí un artículo que trata sobre este mismo tema:

http://msdn.microsoft.com/en-us/magazine/cc188707.aspx

Y ahora el patrón MVC se puede añadir con ASP.NET MVC. :)

EDIT: Desde tu edición/solicitud para obtener más información:

He aquí un artículo que enumera varios patrones y en el que se utiliza en el marco. http://www.jot.fm/issues/issue_2006_11/article1.pdf

Los proveedores en .NET son todos los patrones del modelo de proveedores. http://msdn.microsoft.com/en-us/library/aa479030.aspx

Los patrones del proveedor en .NET también usan el Patrón de estrategia.

El patrón de fábrica se utiliza en varios lugares y aquí hay una muestra donde se usa en ASP.NET. http://msdn.microsoft.com/en-us/library/ms954600.aspx

Aquí hay una transmisión en DP 's en .NET: http://msevents.microsoft.com/cui/WebCastEventDetails.aspx?culture=en-US&EventID=1032293567&CountryCode=US

No he visto, así que no estoy seguro de lo mucho que va en la forma en que se utilizan en el marco ...

Como ya se mencionó en un comentario, es probable que todos los patrones de GoF estén en uso en .NET Framework. Donde no es exactamente el más fácil de responder ya que el marco es masivo y, a menos que MS lo publique como tal en alguno de los ejemplos, dado que no siempre es obvio. Cuanto más familiar es uno con un patrón, más probable es que notes una clase de framework que lo estaba empleando.

Espero que los enlaces adicionales que he agregado te ayuden.

Además, http://www.dofactory.com/Framework/Framework.aspx tiene un kit de venta ($ 79-99) que enseña cómo usar/implementar patrones de GoF en .NET PERO lista en la lectura, también explicará dónde MS los usa en el Framework.

+4

Odio listas como esa. La gran mayoría de los patrones de diseño GoF no son apropiados para programadores .NET. Hay patrones mucho mejores que resuelven los mismos objetivos, pero hágalo usando las características que ofrece la plataforma .NET. Desafortunadamente no tienen nombres elegantes, por lo que tienden a ser ignorados en la literatura. –

+2

Solo dándole lo que él pidió. :) – klabranche

+0

@Grauenwolf y @Paco: Paco piensa que probablemente todos ellos son pero Grauenwolf sostiene que la mayoría probablemente no sean apropiados. Tengo la sensación de que Grauenwolf está más cerca de ser correcto, pero ME ENCANTARÍA escuchar una discusión sobre la posición de Grauenwolf o un enlace a esa discusión. ¿O puede nombrar un patrón o dos que no son apropiados y por qué? –

4

Definitivamente. Por ejemplo, El patrón de fábrica se usa en clases de proveedor de datos ADO.NET. El patrón Singleton se utiliza en .NET remoto. Eliminar patrón se utiliza en la gestión de recursos.

0

Los métodos BeginXXX y EndXXX en el BCL se basan libremente en el Token de compleción asincrónica.

7

Lea las "Pautas de diseño del marco: convenciones, expresiones idiomáticas y patrones para bibliotecas .NET reutilizables". Este libro le mostrará los patrones de diseño reales en los que se basa .NET.

+0

Estaba pensando en sugerir que uno ... :) – klabranche

+0

Segundo eso! Es el Capítulo 9 ("Patrones de diseño comunes") en la primera edición. Guardo esa copia en casa y la segunda edición en funcionamiento. :) – TrueWill

+0

+1: Tengo la segunda edición de este libro. Realmente ofrece una gran idea de cómo diseñar un marco y, de hecho, se dan algunos ejemplos de cómo se diseñan las partes del framework .Net. – Marc

0
  • System.Net.WebClient es un ejemplo para el patrón de fachada.
  • System.IO.Stream: Patrón asíncrono Classic
  • System.ComponentModel.BackgroundWorker: Event-Based patrón asíncrono
  • Como ya se ha mencionado: Modelo Desechar se utiliza en casi todas partes en el marco
  • System.Control: Plantilla Método Patrón
34

El .NET framework usa muchos de los patrones de Gang of Four. Éstos son sólo algunos ejemplos:

patrones de creación

  • Abstract Factory: System.Data.Common.DbProviderFactory. Cada función miembro de esta clase es un método de fábrica.
  • Constructor: La infraestructura de construcción del canal WCF.
  • Factory Method:
    • System.Data.IDbConnection.BeginTransaction(). El tipo de transacción creada depende de la implementación subyacente de IDbConnection.
    • WebRequest.Create() devuelve un tipo concreto que depende del esquema de URL.
  • Prototype - utilizado en marco para la clonación y la serialización
  • Singleton - utilizado como un método de activación en WCF, es decir, un servicio web puede ser tratado como un singleton por la infraestructura WCF. Lo mismo para .NET Remoting.

patrones estructurales

  • adaptador: Los proveedores de ADO.NET, por ejemplo System.Data.SqlClient.SqlConnection, System.Data.OleDb.OleDbConnection etc. Cada proveedor es un adaptador para su base de datos específica.
  • Composite: muchos ejemplos
    • System.Windows.Forms.Control y sus clases derivadas.
    • System.Web.UI.Control y sus clases derivadas.
    • System.Xml.XmlNode y sus clases derivadas.
  • decorador:
    • System.Windows.Controls.Decorator (en WPF).
    • Algunas implementaciones de Stream son decoradores alrededor de un flujo interno (por ejemplo, GZipStream, CryptoStream).
  • Fachada: System.Xml.Serialization.XmlSerializer. XmlSerializer esconde una tarea compleja (¡que incluye generar ensamblajes sobre la marcha!) Detrás de una clase muy fácil de usar.
  • Proxy: Los servidores proxy de servicios web generados por svcutil.exe y derivando de

patrones de comportamiento

  • cadena de responsabilidad:System.Web.UI.Control.OnBubbleEvent() y System.Web.UI.Control.RaiseBubbleEvent().
  • Comando: System.Windows.Input.ICommand (en WPF).
  • Intérprete: System.Linq.Expressions.Expression y clases relacionadas.
  • iterador: muchos ejemplos
    • System.Collections.IEnumerable.
    • System.Collections.Generic.IEnumerable<T>.
    • System.Data.IDataReader.
  • Memento: El .NET Serializable patrón es una variación en el patrón deMemento.
  • Observer - El mecanismo de evento .NET. Estrategia
  • - método Sort en ArrayList
  • plantilla Método - Render método para controles personalizados
  • Visitante: System.Linq.Expressions.ExpressionVisitor (used internally by [LINQ])
+3

+1 ... ¡Gran lista! –

+0

Exactamente lo que estaba buscando ... Gracias Pero, ¿es el ejemplo específico para Iterator pattern IEnumerator que tiene el método MoveNext()? – Ananth

Cuestiones relacionadas