<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Espacio de Dario Quintana &#187; AOP</title>
	<atom:link href="http://blog.darioquintana.com.ar/category/aop/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.darioquintana.com.ar</link>
	<description></description>
	<lastBuildDate>Tue, 21 Jun 2011 22:51:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>Security en Visual Basic</title>
		<link>http://blog.darioquintana.com.ar/2008/05/29/security-en-visual-basic/</link>
		<comments>http://blog.darioquintana.com.ar/2008/05/29/security-en-visual-basic/#comments</comments>
		<pubDate>Thu, 29 May 2008 04:33:28 +0000</pubDate>
		<dc:creator>Dario Quintana</dc:creator>
				<category><![CDATA[AOP]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Visual Basic.Net]]></category>

		<guid isPermaLink="false">http://blog.darioquintana.com.ar/2008/05/29/security-en-visual-basic/</guid>
		<description><![CDATA[<p>Los últimos desafíos que estoy experimentando son en Visual Basic. Como bien saben no soy programador de VB nativo pero gracias a unos helpers funciono </p> <p>Este challenge viene de la mano de:</p> Visual Basic + Seguridad + Intercepción <p align="left">Este es el framework (por ahora la foto):</p> <p align="left"> </p> <p>La idea es básicamente [...]]]></description>
			<content:encoded><![CDATA[<p>Los últimos desafíos que estoy experimentando son en Visual Basic. Como bien saben no soy programador de VB nativo pero gracias a unos helpers funciono <img src='http://blog.darioquintana.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Este challenge viene de la mano de:</p>
<h3 align="center">Visual Basic + Seguridad + Intercepción</h3>
<p align="left">Este es el framework (por ahora la foto):</p>
<p align="left"><img src="http://uooopaa.googlepages.com/SecurityFramework.png"> </p>
<p>La idea es básicamente contar con una aplicación que pueda denegar a servicios (por abajo de la UI) a usuarios con roles por debajo de los requeridos. Por ejemplo vamos a ver a este servicio, que tiene un mensaje <em>Save</em>:</p>
<p><img src="http://uooopaa.googlepages.com/SecurityService.png"></p>
<p>Como pueden ver el atributo encima del método indica el nivel de autorización que se necesita para acceder al método, sería el Rol. En resumidas cuentas esto nos dice es que si un usuario necesita invocar este método en cualquier implementación de este servicio, él mismo debe cumplir tener ese Rol dentro de la Aplicación, esto es, antes debía haberse autenticado.</p>
<p>Ahora, cómo hacemos la intercepción antes que se ejecute el método? Usando un container que permita tales capacidades, en este caso con ayuda total de <a href="http://www.castleproject.org/container/index.html">Windsor Container</a>. <img src="http://uooopaa.googlepages.com/SecurityResolve.png"></p>
<p>1) Se solicita un container, en este caso el container se lo extrae del <em>HttpContext</em>.</p>
<p>2) Solicitamos al container una implementación de <em>IUserService</em>, él nos devuelve una instancia envuelta en un proxy. Debemos recordar que los servicios son agnósticos de la capa de presentación (ya sea Winforms or Asp.Net)</p>
<p>3) Cuando ejecutamos Save, se ejecuta primeramente una validación por parte del Framework de Seguridad para ver si el usuario &#8220;llamador&#8221; cumple con el rol correspondiente. Sino lo hace se lanza una excepción y el método no es invocado. También tenemos intercepción después de terminada la ejecución real del método, si bien decidimos no hacer nada, el framework de seguridad nos permite extender muy fácilmente (implementando 1 clase). </p>
<p>El Framework posee una clase para para la validación previa a la ejecución de los métodos: <em>AspNetInterceptor</em> y esta es la implementación: </p>
<p><img src="http://uooopaa.googlepages.com/SecurityAspNetInterceptor.png"> </p>
<p>Todavía no libero el código, pero en poco tiempo pienso hacerlo como es costumbre</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.darioquintana.com.ar/2008/05/29/security-en-visual-basic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>3 layer Example of NHibernate + Spring.Net + AOP</title>
		<link>http://blog.darioquintana.com.ar/2007/11/17/3-layer-example-of-nhibernate-springnet-aop/</link>
		<comments>http://blog.darioquintana.com.ar/2007/11/17/3-layer-example-of-nhibernate-springnet-aop/#comments</comments>
		<pubDate>Sat, 17 Nov 2007 14:43:55 +0000</pubDate>
		<dc:creator>Dario Quintana</dc:creator>
				<category><![CDATA[AOP]]></category>
		<category><![CDATA[IoC]]></category>
		<category><![CDATA[NHibernate]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[uNHAddIns]]></category>

		<guid isPermaLink="false">http://blog.darioquintana.com.ar/2007/11/17/3-layer-example-of-nhibernate-springnet-aop/</guid>
		<description><![CDATA[<p>Hace un tiempo escrib&#xED; este proyecto plantilla usando <a href="http://springframework.net/">Spring.Net</a> y <a href="http://www.hibernate.org/343.html">NHibernate</a>principalmente. Us&#xE9; NHibernate para el acceso a datos obviamente y <a href="http://springframework.net/">Spring.Net</a> para aplicar <a href="http://blog.darioquintana.com.ar/2006/12/28/inyeccin-de-dependencia-con-springnet/">IoC</a> y <a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming">Aop</a>.</p> <p>Esta es la clase CustomerService:</p> public class CustomerService : BaseService, ICustomerService { /// &#60;summary&#62; /// This field is inyected by IoC through the property. [...]]]></description>
			<content:encoded><![CDATA[<p>Hace un tiempo escrib&#xED; este proyecto plantilla usando <a href="http://springframework.net/">Spring.Net</a> y <a href="http://www.hibernate.org/343.html">NHibernate</a>principalmente. Us&#xE9; NHibernate para el acceso a datos obviamente y <a href="http://springframework.net/">Spring.Net</a> para aplicar <a href="http://blog.darioquintana.com.ar/2006/12/28/inyeccin-de-dependencia-con-springnet/">IoC</a> y <a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming">Aop</a>.</p>
<p>Esta es la clase <em>CustomerService</em>:</p>
<pre class="csharpcode">
    <span class="kwrd">public</span> <span class="kwrd">class</span> CustomerService : BaseService, ICustomerService
    {
	<span class="rem">/// &lt;summary&gt;</span>
        <span class="rem">/// This field is inyected by IoC through the property.</span>
        <span class="rem">/// &lt;/summary&gt;</span>

        <span class="kwrd">private</span> ICustomerDao customerDao;        <span class="kwrd"></span>
 <span class="kwrd">	public</span> ICustomerDao CustomerDao {
            get { <span class="kwrd">return</span> customerDao; }
          set { customerDao = <span class="kwrd">value</span>; }
        }

<span class="preproc">#region</span> ICustomerService Members

<span class="kwrd">	public</span> <span class="kwrd">int</span> CreateCustomer(<span class="kwrd">string</span> Name, <span class="kwrd">string</span> LastName) {

        	Customer customer = <span class="kwrd">new</span> Customer();

        	customer.FirstName = <span class="str">"Dario"</span>;

	        customer.LastName = <span class="str">"Quintana"</span>;

		CustomerDao.Save(customer);

<span class="kwrd">		return</span> customer.Id;

        }

<span class="kwrd">	public</span> <span class="kwrd">void</span> DeleteCustomer(<span class="kwrd">int</span> Id) {

            	Customer customer = CustomerDao.GetById(Id);

		CustomerDao.Delete(customer);

        }

<span class="preproc">#endregion</span>

    }</pre>
<p>Como se puede apreciar las clases <em>CreateCustomer</em> &#xF3; <em>DeleteCustomer</em> no est&#xE1;n envueltas en un codigo Transactional o de UnitOfWork, tampoco el m&#xE9;todo <em>Save(customer)</em> en la clase <em>CustomerDao</em>.</p>
<p>Entonces&#8230; donde est&#xE1; el soporte transaccional? Spring + AOP es la respuesta. Spring envuelve a los metodos del Servicio entre transacciones. Y la respuesta para esto son los proxies.</p>
<p>Cuando se realiza la instanciaci&#xF3;n de la clase CustomerService, un proxy es instanciado. Con el proxy de nuestra clase Spring.Net puede envolver los metodos configurados dentro de transacciones. Muy bueno no ? </p>
<p>Otra cosa que pueden apreciar en el ejemplo es el uso de <a href="http://code.google.com/p/unhaddins/">uNhAddIns</a> en el repositorio. Con esta librer&#xED;a podemos usar queries &quot;detachadas&quot; o separadas de un contexto de persistencia por medio de la clase <a href="http://blog.darioquintana.com.ar/2007/09/06/unhaddins-unofficial-nhibernate-addins/">DetachedQuery</a>. Con DetachedQuery podemos hacer uso indistinto de Hql/SqlNativo en NamedQueries, <a href="http://blog.darioquintana.com.ar/2007/10/16/named-queries-en-nhibernate-y-por-qu-debemos-usarlas/">y esto es una buena pr&#xE1;ctica que debemos tratar de adoptar</a>.</p>
<h4><a href="http://code.google.com/p/darioquintana/downloads/detail?name=SpringNHAop.7z">Descargar el ejemplo</a></h4>
</p>
<pre></pre></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.darioquintana.com.ar/2007/11/17/3-layer-example-of-nhibernate-springnet-aop/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Db4o + Spring Modules y configuraci&#243;n</title>
		<link>http://blog.darioquintana.com.ar/2007/09/27/db4o-spring-modules-y-configuracin/</link>
		<comments>http://blog.darioquintana.com.ar/2007/09/27/db4o-spring-modules-y-configuracin/#comments</comments>
		<pubDate>Thu, 27 Sep 2007 05:10:59 +0000</pubDate>
		<dc:creator>Dario Quintana</dc:creator>
				<category><![CDATA[AOP]]></category>
		<category><![CDATA[db4o]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://blog.darioquintana.com.ar/2007/09/27/db4o-spring-modules-y-configuracin/</guid>
		<description><![CDATA[<p> Una de las cosas que me llama notablemente la atención, es la imposibilidad de poder configurar Db4o por medio de Xml, siendo algo tan común hoy en día y por sobre todo naciendo en Java.</p> <p>La respuesta del lado de Java está justificada, no así del todo del lado de .Net. En Java, yo [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://springmodules.dev.java.net/source/browse/*checkout*/springmodules/docs/reference/src/images/logo-medium.png" align="left"> Una de las cosas que me llama notablemente la atención, es la imposibilidad de poder configurar Db4o por medio de Xml, siendo algo tan común hoy en día y por sobre todo naciendo en Java.</p>
<p>La respuesta del lado de Java está justificada, no así del todo del lado de .Net. En Java, yo creo que la mayoría de los que usan Db4o usan el <a href="https://springmodules.dev.java.net/">módulo de Spring</a> para poder configurarla y obviamente no solo para eso, para usar las ventajas de IoC y Aop que posee Spring. </p>
<p>Algo básico que permite el módulo de Spring para Db4o es la capacidad de envolver a métodos que uno seleccione (y configure correctamente) en transacciones, de modo de abstraernos de este aspecto a nosotros. </p>
<p>Por que digo que no está tan justificado del lado de .Net, por que Spring del lado de .Net no es tan aceptado como lo&nbsp;es del&nbsp;lado de Java, que es donde nació. Y entonces mucho menos será entonces la adopción de dicho módulo pero para .Net.</p>
<p>Que lindo sería si se podría configurar Db4o de esta manera:&nbsp;</p>
<p><!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode"><span class="kwrd">&lt;?</span><span class="html">xml</span> <span class="attr">version</span><span class="kwrd">="1.0"</span> <span class="attr">encoding</span><span class="kwrd">="utf-8"</span> ?<span class="kwrd">&gt;</span>
<span class="kwrd">&lt;</span><span class="html">db4o</span> <span class="attr">assembly</span><span class="kwrd">="db4oif.Test"</span> <span class="attr">namespace</span><span class="kwrd">="db4oif.Test.Objects"</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">class</span> <span class="attr">name</span><span class="kwrd">="Customer"</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">field</span> <span class="attr">name</span><span class="kwrd">="_id"</span> <span class="attr">unique</span><span class="kwrd">="true"</span> <span class="attr">indexed</span><span class="kwrd">="true"</span><span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">class</span><span class="kwrd">&gt;</span>

    <span class="kwrd">&lt;</span><span class="html">class</span> <span class="attr">name</span><span class="kwrd">="Product"</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">field</span> <span class="attr">name</span><span class="kwrd">="_name"</span> <span class="attr">unique</span><span class="kwrd">="true"</span> <span class="attr">indexed</span><span class="kwrd">="true"</span><span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">class</span><span class="kwrd">&gt;</span>

    <span class="kwrd">&lt;</span><span class="html">class</span> <span class="attr">name</span><span class="kwrd">="db4oif.Test.Objects, db4oif.Test"</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">field</span> <span class="attr">name</span><span class="kwrd">="_name"</span> <span class="attr">unique</span><span class="kwrd">="true"</span> <span class="attr">indexed</span><span class="kwrd">="true"</span><span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">class</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">db4o</span><span class="kwrd">&gt;</span></pre>
<p>Cualquier semejanza con un mapping file de NHibernate es pura coincidencia <img src='http://blog.darioquintana.com.ar/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Esto lo había expuesto <a href="http://developer.db4o.com/forums/permalink/40628/40676/ShowThread.aspx#40676">aquí</a> en el foro de la comunidad de Db4o, algún día espero tomarme el tiempo para escribir las clases de configuración, pero supongo que terminaré usando el módulo Spring que ya lo hace por mí (entre otras cosas).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.darioquintana.com.ar/2007/09/27/db4o-spring-modules-y-configuracin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AOP en el Enterprise Library?</title>
		<link>http://blog.darioquintana.com.ar/2007/02/24/aop-en-el-enterprise-library/</link>
		<comments>http://blog.darioquintana.com.ar/2007/02/24/aop-en-el-enterprise-library/#comments</comments>
		<pubDate>Sat, 24 Feb 2007 05:41:46 +0000</pubDate>
		<dc:creator>Dario Quintana</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[AOP]]></category>
		<category><![CDATA[enterprise-library]]></category>
		<category><![CDATA[IoC]]></category>

		<guid isPermaLink="false">http://blog.darioquintana.com.ar/2007/02/24/aop-en-el-enterprise-library/</guid>
		<description><![CDATA[<p>Un nuevo Application Block nació: Policy Injection Application Block. </p> <p>Al parecer, con este nuevo App Block podremos aplicar conceptos como el de <a href="http://en.wikipedia.org/wiki/Separation_of_concerns">SoC (Separation of concerns)</a> en nuestra aplicación, tal como lo venían predicando de manera similar frameworks como <a href="http://springframework.net/">Spring.Net</a>.</p> <p>Para ser claro, podriamos hacer que en&#160;un objeto de nuestra aplicación, al [...]]]></description>
			<content:encoded><![CDATA[<p>Un nuevo Application Block nació: <strong><u>Policy Injection Application Block</u></strong>. </p>
<p>Al parecer, con este nuevo App Block podremos aplicar conceptos como el de <a href="http://en.wikipedia.org/wiki/Separation_of_concerns">SoC (Separation of concerns)</a> en nuestra aplicación, tal como lo venían predicando de manera similar frameworks como <a href="http://springframework.net/">Spring.Net</a>.</p>
<p>Para ser claro, podriamos hacer que en&nbsp;un objeto de nuestra aplicación, al ejecutarse un método, realice una entrada al archivo de log, de forma transparente en el código cliente.&nbsp;</p>
<p>Esto se pone más interesante, en la <strong>interoperabilidad</strong> que podremos llegar a tener con otros App Blocks, como ser: <strong>Validation, Logging, Exception</strong> entre otros. </p>
<p>La idea básica es trabajar con una factoría de clases, para la instanciación de nuestros objetos.&nbsp;Dicha factoria inspeccionará la configuración, para ver si el objeto posee politicas que aplicar, si no las posee, se crea una instancia común y corriente, si las posee, se crea un proxy para que el framework pueda manejar al objeto de forma transparente al cliente.</p>
<p><u>Escenario donde podriamos aplicar:</u></p>
<p>En nuestra aplicación un objeto que posee un método <strong>Guardar(Cliente obj). </strong>Utilizando estos conceptos, podríamos hacer que cada vez que se llame a este método, es decir, que querramos guardar un cliente, por medio del<strong> Policy Injection App Block</strong> se realize la validación del objeto (utilizando el <strong>Validation App Block</strong>), y si no es una entidad válida,&nbsp;dicho método&nbsp;<strong>Guardar </strong>no se ejecute. </p>
<p><u>Para más lean estos posts:</u></p>
<ul>
<li><a href="http://blogs.msdn.com/tomholl/archive/2007/02/23/announcing-the-policy-injection-application-block.aspx">Announcing the Policy Injection Application Block</a></li>
<li><a href="http://blogs.msdn.com/edjez/archive/2007/02/23/policy-injection-app-block-behind-the-scenes.aspx">Policy Injection App Block &#8211; Behind the Scenes</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.darioquintana.com.ar/2007/02/24/aop-en-el-enterprise-library/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

