Cheatography
                https://cheatography.com
            
        
        
    
                   
                            
    
                    Conceptos de la Programación .....
                    
                 
                    
        
        
            
    
        
                                    This is a draft cheat sheet. It is a work in progress and is not finished yet.
                    
        
                
        
            
                                
            
                
                                                
                                
    
    
            Inyección de dependencias
        
                        
                                    
                        Un patrón de diseño orientado a objetos en el que se suministran objetos a una clase en lugar de ser la propia clase la que cree dichos objetos.  | 
                     
                             
                            Formas :  
- Constructor 
- Método Setter 
- Variable de instancia / Propiedad  
                             
    
    
            Solid
        
                        
                                                                                    
                                                                                            Single-responsiblity  | 
                                                                                                                        La clase, componente o microservicios deben hacer una cosa para disminuir futuras modificaciones y/o cambios.  Principio de responsabilidad única  | 
                                                                                 
                                                                                            
                                                                                            Open-closed  | 
                                                                                                                        Entidades deben de estar ABIERTAS para su extensión pero CERRADAS para su modificación.  Principio de abierto/cerrado  | 
                                                                                 
                                                                                            
                                                                                            Liskov Substitution  | 
                                                                                                                        Una subclase debe poder ser sustituible por su superclase.  Principio de sustitución de Liskov  | 
                                                                                 
                                                                                            
                                                                                            Interface Segregation  | 
                                                                                                                        Segregar las clases tanto como sea posible.  Principio de segregación de la interfaz  | 
                                                                                 
                                                                                            
                                                                                            Dependency Inversion  | 
                                                                                                                        Permite inyectar otras clases y añadir funcionalidad transversal  | 
                                                                                 
                                                                         
                             
    
    
            Arquitectura - Capas de Aplicación
        
                        
                                                                                    
                                                                                            Presentation (UI)  | 
                                                                                                                        Handles HTTP requests and responds with HTML OR JSON/XML  | 
                                                                                 
                                                                                            
                                                                                            Service  | 
                                                                                                                        Business logic  | 
                                                                                 
                                                                                            
                                                                                            Data  | 
                                                                                                                        Database access  | 
                                                                                 
                                                                         
                            Despite having a logically modular architecture, the application is packaged and deployed as a monolith  
                             
    
    
            Monolithic Architecture
        
                        
                                                                                    
                                                                                            Benefits  | 
                                                                                                                        - Simple to develop  - Simple to test (launch the application)  - Simple to deploy (Copy packaged app)  - Simple to scale horizontally (Copy apps)  | 
                                                                                 
                                                                                            
                                                                                            Drawbacks  | 
                                                                                                                        - Limitations in size and complexity  - Application becomes to large and complex to fully understand and make changes fast.  - Size of application can slow down start-up time.  - Each update requieres entire application to be redeployed.  - Changes require extensive manual testing.  - Continuous deployment becomes difficult.  - Adopting new technologies must be applied to entire application thus becomes expensive in both time and cost  | 
                                                                                 
                                                                         
                            In the early stages of the project it works well and basically most of the big and successful applications which exist today were started as a monolith.  
                             
    
    
            Microservices Architecture
        
                        
                                                                                    
                                                                                            Benefits  | 
                                                                                                                        Manageable services (Faster to develop)  - Can be managed independently  - New technologies are easier to apply  - Deployed Independently  - Scaled Independently  | 
                                                                                 
                                                                                            
                                                                                            Drawbacks  | 
                                                                                                                        Since it uses partitioned database architecture each database must be handled independently  - Testing is more complex (Must deploy the service and all of its dependencies)  - Deploying becomes more complex (Requires planning and coordination)  - Every service must be configured, deployed, scaled and monitored independently  | 
                                                                                 
                                                                         
                            The ides is to split the application into a set of smaller interconnected services(Microservice) instead of building a single monolithic application.  
Each microservice : 
- Has its own hexagonal architecture (UI, BL,DA) 
- Has its own database schema thus ensures loose coupling 
- Can use the type of database that best suits its needs (Poliglot persistence architecture)  
                             
    
    
            Que es OOP
        
                        
                                    
                        Un modelo que organiza el diseño de software en torno a datos u objetos. 
Beneficios : 
- Reutilización 
- Escalabilidad 
- Eficiencia  | 
                     
                             
                             
    
    
            Principios de OOP
        
                        
                                                                                    
                                                                                            Encapsulacion  | 
                                                                                                                        Toda la información importante está contenida dentro de un objeto y solo se expone la información seleccionada La implementación y el estado de cada objeto se mantienen de forma privada dentro de una clase definida El objeto no tiene acceso a esta clase ni a la autorización para realizar cambios Llamar solo a una lista de métodos o funciones públicos  | 
                                                                                 
                                                                                            
                                                                                            Abstraccion  | 
                                                                                                                        Los objetos solo revelan mecanismos internos que son relevantes para el uso de otros objetos, ocultando cualquier código de implementación innecesario. La clase derivada puede tener su funcionalidad extendida  | 
                                                                                 
                                                                                            
                                                                                            Herencia / Inheritance  | 
                                                                                                                        Las clases pueden reutilizar código de otras clases Se pueden asignar relaciones y subclases entre objetos, lo que permite la reutilización de la lógica común mientras se mantiene una jerarquía única.  | 
                                                                                 
                                                                                            
                                                                                            Polimorpphism  | 
                                                                                                                        Los objetos están diseñados para compartir comportamientos y tomar más de una forma. Permite el paso de diferentes tipos de objetos a través de la misma interfaz.  | 
                                                                                 
                                                                         
                             
    
    
            Access Modifiers
        
                        
                                                                                    
                                                                                            public  | 
                                                                                                                        acceso no está restringido  | 
                                                                                 
                                                                                            
                                                                                            protected  | 
                                                                                                                        acceso está limitado a la clase contenedora  | 
                                                                                 
                                                                                            
                                                                                            internal  | 
                                                                                                                        acceso está limitado al ensamblado actual  | 
                                                                                 
                                                                                            
                                                                                            protected internal  | 
                                                                                                                        El acceso está limitado al ensamblado actual o a los tipos derivados de la clase contenedora.  | 
                                                                                 
                                                                                            
                                                                                            private  | 
                                                                                                                        El acceso está limitado al tipo contenedor  | 
                                                                                 
                                                                         
                             
                             |