Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ESCRITORIO
UNIDAD Nº 2
www.iplacex.cl
SEMANA 4
Introducción
Almacenar la información presente en un sistema, es realmente importante si estos
registros deben ser administrados de forma constante. Agregar nuevos, listar los ya
existentes, actualizar algunos de sus o derecha y llanamente eliminarlos son solo
algunas de las acciones que es posible nombrar al momento de realizar esta gestión.
Estos registros, generalmente estarán dispuestos dentro de una base de datos, la cual
puede ser de tipo relacional. Si es este el caso, entonces, para poder gestionar la
información almacenada se utilizan sentencias sql.
La mayoría del tiempo, estas sentencias sql son escritas directamente en el código fuente
de un programa, lo que supone un riesgo de seguridad, ya que, es más probable que el
software sea propenso a ataques de robo de datos, como lo es la inyección sql. Dentro
de este tipo de base de datos, existirán estructuras que nos permitirán aislar las tablas .
Estas estructuras son los procedimientos almacenados, las vistas y las funciones.
Sin embargo, estos entes, también deben ser invocados utilizando sentencias sql, por lo
que, también pueden llegar a inseguras.
Como solución a esto, existen los ORM, como Entity Framework que son modelos de
programación que permiten generar modelo de entidades que representen a la base de
datos a nivel del código de la aplicación, pero sin la necesidad de exponer las sentencias
sql que los acompañan.
www.iplacex.cl2
Ideas Fuerza
Modelo de entidades: representación de una base de datos en forma de código
de programación, el que será determinado en base al ORM implementado.
www.iplacex.cl3
Desarrollo
1. Arquitectura de la aplicación
Fuente: www.iplacex.cl
2. ORM
Fuente: www.iplacex.cl
Este código permite ejecutar una sentencia select por medio de la clase SqlConnection
a la base de datos que se esté utilizando. Este select realizará una consulta a la tabla y
retornará los datos solicitados para ser mostrados por pantalla en la aplicación de
consola.
www.iplacex.cl5
Si te fijas, no tiene nada de malo este código. Ejecuta cada una de las instrucciones
dadas para retornar un resultado.
En este caso en particular, se trata de un select bastante simple. Sin embargo, cuando
se trata de sentencias muchos más largas, complejas y detalladas, un desarrollador
puede cometer un error de tipeo y la sentencia (sea cual sea) no funcionará o arrojará
algún error. O peor aún, las instrucciones sql entregadas funcionan de maravilla, pero,
son propensas a ataques de inyección sql (SQL Injection).
Aunque existen formas de evitar exponer de forma directa las tablas de una base de
datos, como lo puede ser por medio de la implementación de vistas, procedimientos
almacenados o funciones; esto no asegura que no puedan existir fallos o ataques
externos que intenten vulnerar la seguridad del sistema o de la aplicación que está en
construcción, ya que también deben ser invocadas por medio de sentencias sql que
quedan escritas directamente en el código fuente del programa.
Un camino que permite aplicar seguridad y previene que los desarrolladores cometan
errores al momento de escribir una sentencia sql compleja en el código es por medio de
la implementación de los ORM.
Una entidad será la representación de estructuras como lo son las tablas y vistas en
forma de clases dentro de una aplicación. Estas entidades tendrán la misma estructura
a nivel de propiedades, considerando los nombres y tipos de datos que correspondan al
lenguaje de programación utilizado, que en este caso vendría siendo C#.
www.iplacex.cl6
Imagen 3: Modelo de entidades compuesto por vista
Fuente: www.iplacex.cl
Según el lenguaje de programación y base de datos pueden existir uno o más ORM.
Para esta asignatura, al estarse utilizando C# y SQL Server, por razones de sinergia
entre tecnologías, se estará implementando Entity Framework para generar el modelo
de entidades.
www.iplacex.cl7
3. Capa de datos y Entity Framework
Para suerte nuestra, existen los ORMs, sistemas que ya vimos en el punto anterior y que
permiten mapear estructuras de una base de datos en forma de entidades para ser
aplicadas en el código.
Adicionalmente, también será posible trazar otro tipo de estructuras, como lo son los
procedimientos almacenados, los cuales se comportarán como métodos dentro del
modelo generado a partir de la base de datos.
www.iplacex.cl8
Fuente: www.iplacex.cl
Una de las grandes ventajas de EF, es que, al dar vida a estos modelos, permite a los
desarrolladores realizar consultas directamente a las entidades y relaciones presentes
en el modelo generado. Por “detrás”, este ORM se encargará de traducir cada una de
estas instrucciones a los comandos o scripts necesarios para poder manipular los datos
dentro de una base de datos, es decir, traduce código C# a sentencias de T-SQL
Para obtener estos modelos y que puedan ser implementados dentro de una aplicación,
existen diversos para conseguir el mapeo de estructuras. En EF podemos encontrar
cuatro:
• Empty EF Designer model: permite crear tablas dentro de una base de datos a
partir de un modelo de entidades (clases) vacio diseñado en EF.
www.iplacex.cl9
• Empty Code First model: permite crear una nueva base de datos a partir de las
clases definidas dentro del modelo, en donde estas serán usadas para la creación
de las tablas.
• Code First from database: permite definir el modelo utilizando clases de C#, pero
que serán aplicadas dentro de una base de datos ya existente.
Fuente: www.iplacex.cl
www.iplacex.cl10
La aplicación de uno de estos modelos en un proyecto dependerá de si ya existe una
base de datos con tablas, si existe una base de datos vacía, o si se desea crear tanto la
base de datos y las tablas que contenga.
Para el caso de esta asignatura, como ya existe una base de datos con sus respectivas
tablas, es necesario implementar EF Designer from database para la creación del modelo
de entidades, el que estará compuesto de vitas y procedimientos almacenados
solamente.
www.iplacex.cl11
Imagen 6: Conexión a base de datos Supermercado
Fuente: www.iplacex.cl
www.iplacex.cl12
Esta acción, arrojará un trozo de código conocido como cadena de conexión o
ConnectionString. Este actuará como puente de conexión entre el modelo de entidades
y la base de datos seleccionada.
Una vez, entonces creada esta conexión, es necesario especificar que estructuras serán
importadas de la base de datos y que serán incorporadas dentro del modelo de
entidades. Es posible escoger tablas, vistas, procedimientos almacenados y también
funciones. En esta ocasión solo nos centraremos en las vistas y procedimientos
almacenados, ya que no se estarán utilizando las tablas dentro del modelo ni tampoco
las funciones, ya que estas deben ser ejecutadas por medio de procedimiento
almacenados para que puedan ser utilizables por el modelo.
www.iplacex.cl13
Imagen 8: Selección de estructuras a incluir dentro del modelo de
entidades
www.iplacex.cl14
Fuente: www.iplacex.cl
Fuente: www.iplacex.cl
www.iplacex.cl15
4. Capa de negocio, instancia de persistencia y CRUD
• CommonBC
• IPersistente
• Clase principal
• Clase Collection
• Clase Reportes
CLASE REPORTES
CommonBC
El modelo de entidades generado por Entity Framework se comporta como una clase.
Por ende, es posible crear una instancia de objeto de esta y así poder generar la
comunicación con la base de datos, además de poder utilizar las distintas estructuras
presentes en el modelo.
Para este fin se utiliza la clase CommonBC. Esta, generar una instancia estática del
modelo de entidades, cosa de evitar, que cada vez que se instancie a la clase
CommonBC, se generen nuevas conexiones a la base de datos.
www.iplacex.cl16
Imagen 10: Clase CommonBC e instancia del modelo
Fuente: www.iplacex.cl
IPersistente
Al momento de trabajar con bases de datos, o algún tipo de colección, existen cuatro
acciones principales a realizar sobre los registros almacenados: agregar uno nuevo,
leerlo, actualizarlo y eliminarlo. Estas acciones se pueden repetir para muchas clases.
Por ende, al tratarse de un denominador en común, se genera una interface, la cual
contendrá la firma de el o los métodos en común que puedan ser aplicados para uno o
más clases alrededor de la aplicación.
www.iplacex.cl17
Específicamente, estos métodos serán Create(), Read(), Update() y Delete(), es decir, el
famoso CRUD.
Fuente: www.iplacex.cl
Clase principal
www.iplacex.cl18
Imagen 12: Clase Producto
Por otro lado, los métodos de la interface que, además, implementan los procedimientos
almacenados y la vista presentes en el modelo de datos, lucirán de la siguiente manera:
Fuente: www.iplacex.cl
www.iplacex.cl19
Por un lado, Create será la representación de la acción para crear un nuevo registro
dentro de la base de datos. En nuestro caso, esta acción ejecutará el procedimiento
almacenado correspondiente a agregar un nuevo registro en una tabla.
Fuente: www.iplacex.cl
www.iplacex.cl20
Imagen 15: Método Read implementado en clase Producto
Fuente: www.iplacex.cl
Estos filtros, pueden ser aplicados por medio de LINQ. Este es un conjunto de
tecnologías que permite realizar búsqueda de elementos dentro de colecciones y de
estructuras como lo pueden ser lo manifiestos XML. En esta ocasión, se implementa para
realizar la búsqueda de un Producto en base a su campo de Id.
Update, por otro lado, se utilizará para actualizar uno o más valores de un registro
presente en una tabla. Este registro estará determinado por la implementación de un
filtro, que por lo general será el Id. Este método ejecutará un procedimiento almacenado,
el cual se encargará de modificar los valores de un registro en particular.
www.iplacex.cl21
Imagen 16: Método Update implementado en clase Producto
Fuente: www.iplacex.cl
www.iplacex.cl22
Finalmente, Delete, se encargará de eliminar un registro de la tabla por medio de un
procedimiento almacenado, el cual recibirá el Id del Producto como filtro.
Fuente: www.iplacex.cl
Clase Collection
Sin embargo, para poder nutrir de registros una grilla de datos, ese método Read() no
nos servirá.
Por consecuencia, para poder extraer dos o más elementos, o directamente todos los
registros de la vista, es posible realizarlo por medio de la implementación de una nueva
clase denominada ProductoCollection, la que contendrá la siguiente estructura:
www.iplacex.cl23
Imagen 18: Clase ProductoCollection y sus métodos
Fuente: www.iplacex.cl
En esta obtención de una colección de registros, se utilizan dos métodos, uno encargado
de obtener la lista de datos, transformando cada uno de los registros obtenidos por medio
de la vista, en objetos de la clase Producto, para luego ser almacenados en una lista
interna.
Luego, el resultado de llenar dicha lista es retornado por el método ReadAll(), el cual será
utilizado para llenar las distintas grillas de datos que puedan existir en el proyecto.
www.iplacex.cl24
Conclusión
Los ORMs son sistemas complejos. Permiten crear modelos de entidades a partir de una
base de datos e importar varias de sus estructuras para ser representadas en forma de
clases, si es que son vistas o tablas, o en forma de métodos, si se trata de procedimientos
almacenados.
Esto, acelera el proceso de desarrollo al evitar que los desarrolladores deban escribir las
sentencias sql directamente en el código de una app.
También, al representar la base de datos y permitir trabajar directamente con esta sin,
muchas veces, necesariamente conocer la estructura de esta.
Entonces, aplicar este tipo de sistemas dentro de una app, permite facilitar la
administración de la información almacenada, pero también asegurarla a fugas de datos
o ataques de algún tipo.
www.iplacex.cl25
Bibliografía
ORM
https://www2.deloitte.com/es/es/pages/technology/articles/que-es-orm.html
Entity Framework
https://entityframework.net/what-is-ef
Creating a Model
https://docs.microsoft.com/en-us/ef/ef6/modeling/
CRUD
https://developer.mozilla.org/es/docs/Glossary/CRUD
www.iplacex.cl26
www.iplacex.cl27