Patrn arquitectnico programacin por capas. Se utiliza para la organizacin
de proyecto, el cual fue dividido en 4 capas: vista, controlador, lgica y persistencia. Este patrn nos permite asegurar que los diferentes artefactos estn organizados de forma que sea fcil entender el proyecto, y fcil de editar en caso de que se necesiten hacer correcciones posteriores. Adems de facilitar el trabajo compartido. Patrn de diseo, controlador: Para separar la vista de la lgica. Abstract Factory: para agrupar la creacin de objetos de una misma familia, por ejemplo cada mtrica hace parte de una misma familia, adems cada factora sirve de fachada y mediador para su correspondiente componente, simplificando el acceso al mismo. Singleton: Existen 2 singletons en el proyecto, son utilizados para almacenar informacin que debe estar disponible siempre en tiempo de ejecucin, uno es para almacenar los archivos XMI cargados y el otro para almacenar los resultados de las mtricas. Iterator, este patrn de diseo es utilizado para mantener la encapsulacin entre los dos componentes principales de la aplicacin (Calculo de mtricas y manejo de archivos XMI). Un ejemplo de esto es que permite que el componente clculo de mtricas pueda tener acceso a los datos recopilados por manejo de archivos XMI sin necesidad de que conozca su funcionamiento interno. Indireccin, las factoras son un claro ejemplo de direccin, pues representan un punto intermedio entre diferentes partes de la lgica del proyecto, se utiliza para garantizar un bajo acoplamiento y una alta cohesin. Fabricacin pura, existen muchas fabricaciones puras en el proyecto, las Factoras, los controladores y muchas clases ms son ejemplo de esto, estas fabricaciones puras contribuyen a mantener un bajo acoplamiento entre las clases y una alta cohesin. Creador y experto: para asegurar de que los objetos instanciados sean creados por la clase que es experta en la informacin de ese objeto y/o agregue el objeto en cuestin. Bajo acoplamiento y alta cohesin: este patrn se cumple gracias a la ayuda de los mencionados anteriormente, contribuye a la calidad del producto pues un
software con bajos niveles de acoplamiento y niveles altos de cohesin es fcil
de mantener, entender por lo que puede ser reutilizado con facilidad.