We may earn an affiliate commission when you visit our partners.
Miguel Castro

This course will teach you patterns that allow you to build your software out of swappable building blocks, as well as allow future developers to extend it easily. You'll learn how to make your applications easier to maintain even while constantly changing and evolving, all while maintaining complete testability.

Read more

This course will teach you patterns that allow you to build your software out of swappable building blocks, as well as allow future developers to extend it easily. You'll learn how to make your applications easier to maintain even while constantly changing and evolving, all while maintaining complete testability.

In today's competitive world of software development, using methodologies such as Agile lets us get products to market quicker and in a controlled fashion, but that's not enough. Applications need to be able to grow without being totally rewritten. Sure, there eventually comes a time when every app needs a major overhaul, but if applications are written to be extensible in the first place, the overhaul can be performed in pieces; and in the meantime, new features can be added or existing features changed without bringing the app down. This "extensibility" in our design is becoming more and more important every day as software shops compete with each other for work and even with other countries. There have been many articles and design documents written on things like inversion of control in the UI tiers. Many books have dedicated chapters to injecting objects into MVC controllers or WPF ViewModels, but not many have focused on the meat of a system, the business tiers. These are the tiers that are accessible to the UI of a system, more than one in many cases. And these are the tiers that can be most volatile and subject to change and enhancement. In this course, I'll show you some of my favorite extensibility designs and techniques which will let you write software in building blocks that can be connected and interconnected in different ways. I'll keep most of my focus on the business tiers, which despite the lack of user-centric visual glamour, is where you get to exercise the most creativity. You'll be able to roll out applications and continuously add or change things without affecting the core infrastructure in place. To me, this not only makes the software better, but more fun to write!

Enroll now

Here's a deal for you

We found an offer that may be relevant to this course.
Save money when you learn. All coupon codes, vouchers, and discounts are applied automatically unless otherwise noted.

What's inside

Syllabus

Welcome and Course Description
Importance of Extensibility
Abstraction and Dependency Injection
Implementing Providers
Read more
Implementing Modules
Advanced Module Usage
Pipelines
Procedural Overriding
Using MEF
Conclusion

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Develops modularity and dependency inversion, which are recommended in microservices
Taught by Miguel Castro, a skilled instructor in microservices
Examines pipelines and procedural overriding, which are techniques to improve testability
Teaches abstraction and dependency injection, which are essential topics for building modular software
Explores MEF, a software extensibility framework, which is helpful for building loosely coupled systems

Save this course

Save Developing Extensible Software to your list so you can find it easily later:
Save

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Developing Extensible Software with these activities:
Explore the capabilities of MEF for extensible application development
Delve into the world of MEF, a powerful tool for building extensible applications, by following online tutorials and experimenting with its features.
Show steps
  • Find online tutorials that cover MEF basics and advanced concepts.
  • Follow along with the tutorials, implementing MEF components in your code.
  • Experiment with different MEF features to understand their capabilities.
Build an extensible app with dependency injection
Craft a fully functional application using dependency injection principles, exploring the core concepts and their practical implementation.
Show steps
  • Design the application architecture with tightly coupled components.
  • Introduce dependency injection to decouple components and improve testability.
  • Create a dependency injection container to manage and resolve dependencies.
  • Implement dependency injection in your application code.
Refactor an existing application to make it extensible using dependency injection
Enhance your understanding of dependency injection by transforming an existing application, applying DI principles to improve its extensibility and maintainability.
Browse courses on Dependency Injection
Show steps
  • Analyze an existing application codebase and identify areas for improvement.
  • Design a new architecture using dependency injection principles.
  • Refactor the application code to implement dependency injection.
  • Test the refactored application to ensure correct functionality.
Five other activities
Expand to see all activities and additional details
Show all eight activities
Develop a modular business tier using providers and modules
Construct a real-world business tier by implementing providers and modules, understanding their benefits and how to leverage them effectively.
Show steps
  • Design a business tier architecture using modules and providers.
  • Create providers to encapsulate business logic and data access.
  • Develop modules to connect and orchestrate providers.
  • Implement the modular business tier in your application.
Write a blog post on best practices for implementing extensible software
Consolidate your learning by composing a blog post, sharing your insights and best practices for designing and developing extensible software applications.
Show steps
  • Research and gather information on best practices.
  • Outline the structure and key points of your blog post.
  • Write the content, providing clear examples and illustrations.
  • Proofread and edit your blog post to ensure clarity and readability.
Implement scalable pipelines in your extensible application
Build an application that harnesses the power of pipelines to process data efficiently and flexibly, gaining practical experience in pipeline implementation.
Show steps
  • Design a pipeline architecture for your application.
  • Create pipelines to handle specific data processing tasks.
  • Connect pipelines together to form complex data flows.
  • Implement error handling and monitoring for your pipelines.
Participate in a hackathon focused on building extensible software
Put your skills to the test and gain valuable experience by participating in a hackathon centered around developing extensible software solutions.
Show steps
  • Find and register for a relevant hackathon.
  • Form a team or work independently.
  • Develop an extensible software solution during the hackathon.
  • Present your solution and compete for prizes and recognition.
Contribute to an open-source project focused on extensibility
Immerse yourself in real-world extensibility challenges by contributing to an open-source project dedicated to developing and maintaining extensible software solutions.
Show steps
  • Identify an active open-source project related to extensibility.
  • Review the project's codebase and documentation.
  • Identify areas where you can contribute.
  • Make pull requests to submit your contributions.

Career center

Learners who complete Developing Extensible Software will develop knowledge and skills that may be useful to these careers:
Software Engineer
Software Engineers design, develop, test, and maintain software systems. They work on a variety of projects, from small personal apps to large enterprise systems. This course can be a valuable part of a Software Engineer's toolkit. It teaches patterns that allow you to build your software out of swappable building blocks, as well as allow future developers to extend it easily. This can help Software Engineers create more maintainable and extensible software systems.
Software Architect
Software Architects design and build the overall architecture of software systems. They work with stakeholders to understand the business needs of a system, and then design a system that meets those needs. This course can help Software Architects learn how to create extensible software systems that can be easily changed and evolved over time.
Computer Programmer
Computer Programmers write and maintain computer programs. They work on a variety of projects, from small personal apps to large enterprise systems. This course can help Computer Programmers learn how to write more maintainable and extensible code. It teaches patterns that allow you to build your software out of swappable building blocks, as well as allow future developers to extend it easily.
Technical Lead
Technical Leads are responsible for the technical vision and direction of a software development team. They work with the team to design and implement software systems, and they ensure that the team is using the best practices and technologies. This course can help Technical Leads learn how to create extensible software systems that can be easily changed and evolved over time.
Project Manager
Project Managers are responsible for planning, organizing, and managing software development projects. They work with stakeholders to understand the business needs of a project, and then they develop a plan to meet those needs. This course can help Project Managers learn how to create extensible software systems that can be easily changed and evolved over time.
Systems Analyst
Systems Analysts study how businesses operate and then design and implement software systems to improve their efficiency and effectiveness. This course can help Systems Analysts learn how to create software systems that are more easily extended with new features and functionality.
Data Scientist
Data Scientists use data to solve business problems. They work with data to identify patterns and trends, and they then develop models to predict future outcomes. This course may be helpful for Data Scientists who want to learn how to create software systems that can be easily extended with new data sources and models.
Machine Learning Engineer
Machine Learning Engineers design and build machine learning models. They work with data to identify patterns and trends, and they then develop models to predict future outcomes. This course may be helpful for Machine Learning Engineers who want to learn how to create software systems that can be easily extended with new data sources and models.
Business Analyst
Business Analysts study how businesses operate and then design and implement software systems to improve their efficiency and effectiveness. This course may be helpful for Business Analysts who want to learn how to create software systems that are more easily extended with new features and functionality.
Software Tester
Software Testers test software systems to find and fix bugs. They work with developers to ensure that software systems meet the requirements of the business. This course may be helpful for Software Testers who want to learn how to test software systems that are more easily extended with new features and functionality.
User Experience Designer
User Experience Designers design the user interface of software systems. They work with users to understand their needs and then design interfaces that are easy to use and understand. This course may be helpful for User Experience Designers who want to learn how to design software systems that are more easily extended with new features and functionality.
Technical Writer
Technical Writers write documentation for software systems. They work with developers to understand the software systems and then write documentation that is easy to understand and follow. This course may be helpful for Technical Writers who want to learn how to write documentation for software systems that are more easily extended with new features and functionality.
Product Manager
Product Managers are responsible for the overall product vision and direction of a software product. They work with stakeholders to understand the business needs of a product, and then they develop a plan to meet those needs. This course may be helpful for Product Managers who want to learn how to create software products that are more easily extended with new features and functionality.
Database Administrator
Database Administrators are responsible for the maintenance and administration of databases. They work with databases to ensure that they are running smoothly and efficiently. This course may be helpful for Database Administrators who want to learn how to administer databases that are more easily extended with new data sources and models.
IT Manager
IT Managers are responsible for the overall IT infrastructure of an organization. They work with stakeholders to understand the business needs of the organization, and then they develop a plan to meet those needs. This course may be helpful for IT Managers who want to learn how to create IT infrastructures that are more easily extended with new technologies and applications.

Reading list

We've selected 12 books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Developing Extensible Software.
Classic in the field of software design and provides a comprehensive overview of design patterns. It valuable resource for anyone interested in learning more about how to write extensible software.
Provides a comprehensive overview of agile software development principles, patterns, and practices. It valuable resource for anyone interested in learning more about how to write extensible software in an agile environment.
Provides a comprehensive overview of dependency injection in .NET. It valuable resource for anyone interested in learning more about how to write extensible software using dependency injection.
Provides a comprehensive overview of domain-driven design. It valuable resource for anyone interested in learning more about how to write extensible software that is closely aligned with the business domain.
Provides a comprehensive overview of enterprise integration patterns. It valuable resource for anyone interested in learning more about how to write extensible software that can be integrated with other systems.
Provides a comprehensive overview of clean code principles. It valuable resource for anyone interested in learning more about how to write extensible software that is easy to read and understand.
Provides a comprehensive overview of design patterns in a fun and engaging way. It valuable resource for anyone interested in learning more about how to write extensible software.
Provides a comprehensive overview of test-driven development. It valuable resource for anyone interested in learning more about how to write extensible software that is easy to test.
Provides a comprehensive overview of DevOps. It valuable resource for anyone interested in learning more about how to write extensible software that can be developed and operated efficiently.
Provides a comprehensive overview of site reliability engineering. It valuable resource for anyone interested in learning more about how to write extensible software that is reliable and scalable.
Provides a comprehensive overview of microservices. It valuable resource for anyone interested in learning more about how to write extensible software that can be deployed and managed independently.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Here are nine courses similar to Developing Extensible Software.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2024 OpenCourser