José Jorge Márquez Gómez

Etiqueta:. NET

Patró Factoria (Factory)

per a ago.27, 2010, sota Donet

Un patró factoria ens serveix per canalitzar totes les creacions d'objectes en un sol punt. Això és útil per a un disseny robust del nostre sistema i àgil al canvi.

El patró factoria es pot combinar amb el patró Singleton ja que és més còmode el seu ús i útil la seva forma d'utilitzar. En aquest exemple posarem un factoria sense Singleton.

Dir que el patró factoria és del tipus patrons creacionals, que aquest tipus de patró abstreu la manera de crear objectes concrets, donant així un suport per crear objectes de forma abstracta.

Per començar un patró factoria ha de complir:
- Una funció o mètode el qual s'encarrega de crear objectes d'un tipus donat.
- No és obligatori però si recomanable que aquesta funció o mètode retorni una abstracció (interfície o classe abstracta).

Imaginem que una botiga de pizzes requereix d'un programari que necessita que tinguin una sèrie de productes (pizzes variades). Com a bons dissenyadors que som, la creació d'objectes de pizzes es podrà fer des de qualsevol part el projecte, però el problema és que hi ha molts tipus de pizzes. El crear cada pizza de cada tipus en diferents punts del programa seria el primer que pensaríem, però ... si en comptes d'això fem servir sentit comú i apliquem el factoria?, Això ens permetria que donat un nou producte o un canvi en algun d'ells , que només canviem en un sol lloc, tenint més controlat aquest codi. Fins i tot si us adoneu l'agilitat al canvi és molt més gran que anar canviant totes les possibles aparicions de les nostres pizzes pel codi.
Doncs bé, el factoria s'encarregaria de crear tot tipus de pizzes i les oferiria a tots els possibles punts del programa.

El nostre exemple seria el següent:

- La interfície IPizza:

     interfície IPizza
     {
         void quienSoy ();
     }

- Les pizzes concretes:

     public class PizzaBarbacoa: IPizza
     {
         # Region Membres de IPizza

         public void quienSoy ()
         {
             Console.WriteLine ("Sóc una pizza de Barbacoa");
         }

         # Endregion
     }
     public class PizzaMargarita: IPizza {# regió Membres de IPizza public void quienSoy () {Console.WriteLine ("Sóc una pizza de Margarida");} # endregion} 
     public class PizzaPepperoni: IPizza
     {
         # Region Membres de IPizza

         public void quienSoy ()
         {
             Console.WriteLine ("Sóc una pizza de Pepperoni");
         }

         # Endregion
     }

- La factoria en qüestió:

     public class PizzaFactory
     {
         public enum tipoPizza
         {
             Pepperoni, Margarita, Barbacoa
         }

         public IPizza getPizza (tipoPizza tipus)
         {
             switch (tipus)
             {
                 case tipoPizza.Barbacoa:
                     return new PizzaBarbacoa ();
                     break;
                 case tipoPizza.Margarita:
                     return new PizzaMargarita ();
                     break;
                 case tipoPizza.Pepperoni:
                     return new PizzaPepperoni ();
                     break;
                 default:
                     return new PizzaBarbacoa ();
             }
         }
     }

- Un petit test:

     public class Test {public void testPizza () {/ / exemple no usant factoria IPizza pizza1 = new PizzaBarbacoa (); pizza1.quienSoy (); IPizza pizza2 = new PizzaMargarita (); pizza2.quienSoy (); IPizza pizza3 = new PizzaPepperoni ( ); pizza3.quienSoy (); IPizza pizza4 = new PizzaBarbacoa (); pizza4.quienSoy (); IPizza pizza5 = new PizzaMargarita (); pizza5.quienSoy (); / / exemple usant factoria PizzaFactory factory = new PizzaFactory (); IPizza pizza6 = factory.getPizza (PizzaFactory.tipoPizza.Barbacoa); pizza6.quienSoy (); IPizza pizza7 = factory.getPizza (PizzaFactory.tipoPizza.Margarita); pizza7.quienSoy (); IPizza pizza8 = factory.getPizza (PizzaFactory.tipoPizza. Pepperoni); pizza8.quienSoy ();}} 

Com veieu la forma d'ús i els seus avantatges són millors. Espero que us serveixi!!. Fins ara!

más... Deixa un comentari : , , , més ...

Log4Net per a C #

per a ago.25, 2010, sota Donet

Bé avui us explicaré una mica com configurar log4net per c #. Però abans dir-vos que és log4net.

Log4Net és un framework portat de la llibreria log4java, el qual t'ofereix totes les eines possibles per poder fer un logging, control d'errors, monitorització d'aplicacions per a totes les aplicacions possibles. Al meu parer, és el log més bo que he provat fins ara i és bastant fàcil de configurar. Ofereix bastants maneres de monitorització i fins i tot el crear-te els teus propis. Aquesta llibreria la podeu obtenir de http://logging.apache.org/log4net/index.html .

Explicarem alguns conceptes referents al log4net.

Log4NET ofereix diferents nivells de monitorització predefinits com són:

1. Debug: Se sol usar per a línies de debug.
2. Info: Se sol usar per donar informació relativa de la vostra aplicació.
3. Warn: Són possibles punts de ruptura del vostre programari, o sigui, possibles alertes importants.
4. Error: S'usa per detectar errors del vostre programari.
5. Fatal: S'usa per detectar possibles errors importants de programari, és a dir, que impedeixin el funcionament d'aquest per exemple.

Aquests nivells són els que porta predefinits log4net, però es poden crear nivells personalitzats.

Un altre punt a destacar són els Appenders, això no és sinó la manera en què els diversos nivells del log4net seran monitoritzats / logeados, en log4net existeixen aquests entre d'altres:

1. FileAppender: Logea el nivell definit en la configuració en fitxer.
2. RollingFileAppender: Logea el nivell definit en la configuració en un fitxer que va rotant depenent del seu pes.
3. SmtpAppender: Logea el nivell definit en la configuració i és enviat a un destinatari de correu.

Més endavant en un exemple de configuració veureu aquests nivells configurats. Per a més detalls de totes les seves propietats dels appenders podeu veure la web que teniu a continuació.

Tots els podeu veure detallats en aquest web http://logging.apache.org/log4net/release/config-examples.html .

Comencem.

El primer pas és descarregar-vos la llibreria de la web anterior, un cop descarregada aquesta llibreria heu agregar-la a les referències del vostre projecte. Seguidament anem a configurar el log4net en el fitxer de configuració de la vostra aplicació, en cas d'una aplicació web serà el web.config, en cas d'una aplicació consola el app.config, etc ...

En el tag "configuration" -> "ConfigSection" -> afegiu la següent línia:

  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821"/> 

A continuació en un tag nou que creiem anomenat "<log4net>" es configuren allà els appenders. Cada un té la seva pròpia configuració a la web anterior es poden veure totes. Adjunt Exemple log4net

Un cop tenim això configurat ja podem fer ús del nostre log4net en la nostra aplicació. Un requisit que ha de complir és que cada classe ha de inicialitzar el log4net en el seu constructor tal que quedi com posa en el següent codi:

  class test
 {
 private ILOG log;
 public test ()
 {
 log4net.Config.XmlConfigurator.Configure ();
 log = LogManager.GetLogger (this.GetType ()); / / aquí procedim a inicialitzar l'objecte log.
 } 

Per fer ús del nostre log és simple, només haurem de cridar als diferents nivells d'alerta que posseeix a través de l'objecte log.

Espero que us serveixi com inicialització amb el log4net.

Salutacions!

más... Deixa un comentari : , , , més ...

Busques alguna cosa?

Utilitzeu el formulari següent per buscar en el lloc:

Encara no ha trobat el que estàs buscant? Deixeu un comentari o contacta amb nosaltres per encarregar.

Visita els nostres amics!

Uns llocs molt recomanables ...

Arxiu

Totes les entrades, cronològicament ...