Simone Chiaretta gives a presentation on design for testability as a way to achieve good coding. He discusses principles of good design like high cohesion and low coupling. He then covers testability requirements and concepts like testing individual features in isolation. Chiaretta advocates for dependency injection and inversion of control as ways to achieve design for testability and thus good design. He demonstrates these concepts using examples in Ninject and Unity dependency injection frameworks.
The document provides guidance for developers on best practices for writing code. It emphasizes following rules like clean code, code reviews, and refactoring. Key points include writing simple and readable code, avoiding duplication, learning from others, and ensuring code meets definitions of done that specify requirements like testing and code quality. Refactoring is advised to reduce technical debt by improving structure without changing functionality. Code reviews are recommended to catch defects through constructive peer review.
This presentation talks about the Dependency Injection design principle, providing an overview of the pattern and its benefits while showing examples on how to apply it using Autofac, a specific dependency injection tool for .NET development.
Autofac: http://code.google.com/p/autofac/
A book on DI: http://www.manning.com/seemann/
This document provides biographical information about the speaker Matt Stine and outlines the topics he will cover in his presentation. Stine will discuss how software designs tend to degrade over time due to various factors, and how following the SOLID principles of object-oriented design can help address this problem and make designs more functional in nature. He will also cover trends in how software systems evolve, different programming paradigms, and the ongoing quest for software design "best practices."
This document discusses the SOLID principles for writing clean code. It introduces each of the five SOLID principles - Single Responsibility Principle, Open Closed Principle, Liskov Substitution Principle, Interface Segregation Principle, and Dependency Inversion Principle. For each principle, it provides a brief definition and example of how it can be applied to code. It also discusses software requirements, software rot, and the additional YAGNI principle of avoiding unnecessary complexity.
This document discusses object oriented design principles. It begins with an introduction and agenda. It then covers several object oriented design principles including the open-closed principle, single responsibility principle, interface segregation principle, Liskov substitution principle, and dependency inversion principle. Examples are provided for each. It also discusses bad designs, anti-patterns, and some "evil stuff" to avoid like singletons. The document concludes with a review of key principles like encapsulation, composition over inheritance, programming to interfaces, and loose coupling.
The document discusses several object-oriented (OO) design principles including the single responsibility principle (SRP), open-closed principle (OCP), Liskov substitution principle (LSP), interface segregation principle (ISP), and dependency inversion principle (DIP). It also discusses design patterns, refactoring, and design by contract (DBC) as ways to prevent software decay over time and improve design quality. The key OO principles guide developers to create flexible, maintainable and reusable software designs.
The document provides guidance for developers on best practices for writing code. It emphasizes following rules like clean code, code reviews, and refactoring. Key points include writing simple and readable code, avoiding duplication, learning from others, and ensuring code meets definitions of done that specify requirements like testing and code quality. Refactoring is advised to reduce technical debt by improving structure without changing functionality. Code reviews are recommended to catch defects through constructive peer review.
This presentation talks about the Dependency Injection design principle, providing an overview of the pattern and its benefits while showing examples on how to apply it using Autofac, a specific dependency injection tool for .NET development.
Autofac: http://code.google.com/p/autofac/
A book on DI: http://www.manning.com/seemann/
This document provides biographical information about the speaker Matt Stine and outlines the topics he will cover in his presentation. Stine will discuss how software designs tend to degrade over time due to various factors, and how following the SOLID principles of object-oriented design can help address this problem and make designs more functional in nature. He will also cover trends in how software systems evolve, different programming paradigms, and the ongoing quest for software design "best practices."
This document discusses the SOLID principles for writing clean code. It introduces each of the five SOLID principles - Single Responsibility Principle, Open Closed Principle, Liskov Substitution Principle, Interface Segregation Principle, and Dependency Inversion Principle. For each principle, it provides a brief definition and example of how it can be applied to code. It also discusses software requirements, software rot, and the additional YAGNI principle of avoiding unnecessary complexity.
This document discusses object oriented design principles. It begins with an introduction and agenda. It then covers several object oriented design principles including the open-closed principle, single responsibility principle, interface segregation principle, Liskov substitution principle, and dependency inversion principle. Examples are provided for each. It also discusses bad designs, anti-patterns, and some "evil stuff" to avoid like singletons. The document concludes with a review of key principles like encapsulation, composition over inheritance, programming to interfaces, and loose coupling.
The document discusses several object-oriented (OO) design principles including the single responsibility principle (SRP), open-closed principle (OCP), Liskov substitution principle (LSP), interface segregation principle (ISP), and dependency inversion principle (DIP). It also discusses design patterns, refactoring, and design by contract (DBC) as ways to prevent software decay over time and improve design quality. The key OO principles guide developers to create flexible, maintainable and reusable software designs.
Mock Objects, Design and Dependency Inversion PrincipleP Heinonen
Mock objects are used in unit tests to simulate dependencies and allow for isolated testing. They can verify behavior and help drive design towards looser coupling between classes. The Dependency Inversion Principle and patterns like dependency injection follow the "high-level policy of asking for abstractions, not implementations" to reduce tight coupling and allow flexible reuse of modules.
This document summarizes a presentation about the open source Verilog simulator Verilator. It discusses why open source simulation is useful, provides an introduction and overview of Verilator's features, and addresses questions about getting started with and using Verilator. The presentation also covers Verilator's performance advantages over other simulators, considerations for whether Verilator may be suitable, its future development, and how users can contribute back to the project.
This document summarizes the key lessons learned from converting a legacy robotics project from Objective-C to Swift. It discusses issues with the original Objective-C code like silent nil failures, weak type safety with NSCoding, and problems with error handling. The document then covers how Swift addresses these issues through features like optional values, type safety, value types, and improved error handling with enums, throws, and do-catch. Overall, converting to Swift reduced the code base size by 75%, removed classes of bugs, found subtle bugs earlier, and allowed new features by making the code more robust.
I gotta dependency on dependency injectionmhenroid
Satisfy your desire to be a better software developer by learning how to implement Dependency Injection (DI) in your application. Dependency Injection is one of the more popular implementations of Inversion of Control (IoC) that helps to increase modularity and extensibility of software. In this lecture, we'll discuss the benefits of DI, methods for implementing and refactoring existing code to use DI, adding unit tests using MSTest and Moq, popular DI frameworks like Unity, Ninject, and Castle Windsor, as well as alternative IoC patterns and anti-patterns.
"Refactoring to SOLID Code" session presentation from
Emerging .NET Devs - October 2011 User Group Meeting.
Please note that this presentation has been simplified for publishing.
Build software like a bag of marbles, not a castle of LEGO®Hannes Lowette
If you have ever played with LEGO®, you will know that adding, removing or changing features of a completed castle isn’t as easy as it seems. You will have to deconstruct large parts to get to where you want to be, to build it all up again afterwards. Unfortunately, our software is often built the same way. Wouldn’t it be better if our software behaved like a bag of marbles? So you can just add, remove or replace them at will?
Most of us have taken different approaches to building software: a big monolith, a collection of services, a bus architecture, etc. But whatever your large scale architecture is, at the granular level (a single service or host), you will probably still end up with tightly couple code. Adding functionality means making changes to every layer, service or component involved. It gets even harder if you want to enable or disable features for certain deployments: you’ll need to wrap code in feature flags, write custom DB migration scripts, etc. There has to be a better way!
So what if you think of functionality as loose feature assemblies? We can construct our code in such a way that adding a feature is as simple as adding the assembly to your deployment, and removing it is done by just deleting the file. We would open the door for so many scenarios!
In this talk, I will explain how to tackle the following parts of your application to achieve this goal: WebAPI, Entity Framework, Onion Architecture, IoC and database migrations. And most of all, when you would want to do this. Because… ‘it depends’.
Build software like a bag of marbles, not a castle of LEGO®Hannes Lowette
Hannes Lowette discusses how to structure software code like a bag of marbles rather than a LEGO castle. The document describes challenges faced with a tightly coupled codebase and how adopting an onion architecture approach using plugins allowed for more modular and maintainable code. Key points include defining clean dependencies and interfaces, making core business logic decoupled and testable, and enabling new features to be added and removed through plugins without polluting the core codebase.
This document discusses object-oriented design principles including encapsulation, abstraction, inheritance, polymorphism, and decoupling. It then introduces the SOLID principles of object-oriented design: single responsibility principle, open/closed principle, Liskov substitution principle, interface segregation principle, and dependency inversion principle. Code examples are provided to demonstrate how to apply these principles and improve code maintainability, reusability, and testability.
This document provides an overview of the Angular CLI and how to get started with it. It discusses how to install the Angular CLI, generate an initial project using the ng new command, and an overview of the file structure and common commands like ng serve, ng test, and ng build. It also briefly touches on generating components, services, pipes and more using the ng generate command.
This document outlines the SOLID principles of object-oriented design, including Single Responsibility Principle, Open-Closed Principle, Liskov Substitution Principle, Interface Segregation Principle, and Dependency Inversion Principle. It defines each principle, provides examples, and discusses the benefits, such as increasing reusability, making code more extensible and flexible, and reducing coupling between modules. Applying these principles helps create software that is well-designed and able to easily handle changes, improving developer and customer satisfaction.
Vincent Grondin compares three mocking frameworks: Moq, JustMock, and Isolator. Mocking frameworks allow developers to isolate code under test from its infrastructure, make code behavior predictable, accelerate unit test execution by simulating code, and facilitate parallel development. Frameworks are either based on dynamic proxies or the .NET Profiler API. Without frameworks, developers must maintain mocks, dependency injection, and testable architecture in code. The document demonstrates mocking with each framework, describing important classes and methods for designating mocked methods and determining return values.
Dependency Injection in .NET applicationsBabak Naffas
This document discusses dependency injection (DI) in .NET applications. It defines DI as a design pattern that implements inversion of control to resolve dependencies. An example shows how to refactor legacy code to use DI by introducing interfaces and constructor injection. The benefits of DI include easier testing using mocks, loose coupling between classes, and centralized configuration. DI should be used across architectural and responsibility boundaries. Various strategies for implementing DI are discussed, including delegates, mock POCOs, and frameworks like Moq. Legacy code challenges around static methods and cookies are also addressed.
Pavlo Zhdanov "Mastering solid and base principles for software design"LogeekNightUkraine
The document discusses SOLID principles and other principles of software design including single responsibility, open/closed, Liskov substitution, interface segregation, and dependency inversion. It provides definitions and examples of each. The SOLID principles aim to create simple, modular, and understandable code by establishing best practices for class design. Additional design principles discussed ensure reusable, cohesive components with stable dependencies and abstractions.
original (better quality) on https://docs.google.com/presentation/d/1bnwj8CrFGo5KekONYSeIHySdkoXZiewJxkHcZjXnzkQ/
slides from OpenDaylight Summit Oct 2016 Seattle
All 23 classical GOF Design Patterns with illustrations that try to catch some essence of them.
Used in a presentation for Eindhoven Developers, March 17, 2015 http://www.meetup.com/Eindhoven-Developers-Meetup/events/220477660/
Dsug 05 02-15 - ScalDI - lightweight DI in ScalaUgo Matrangolo
ScalDI is a lightweight dependency injection (DI) framework for Scala that provides an alternative to the "Cake Pattern" approach. It defines three main concepts - Injector, Module, and Injectable - that make DI easier to use and understand compared to the Cake Pattern. Modules are used to define bindings between types and implementations using a simple DSL. The Injectable trait allows dependencies to be injected into classes in a type-safe manner. ScalDI also supports features like conditional bindings, constructor injection, lifecycle management, and integration with Play and Akka.
This document discusses Agile software development principles and patterns. It covers the following key points:
- Agile principles focus on satisfying customers, welcoming changing requirements, frequent delivery of working software, collaboration between business and developers, trusting and self-organizing teams.
- The document then discusses refactoring code using patterns like factory, abstract factory, singleton, strategy, and gateway to make the code more maintainable, reusable, and extensible.
- It shows how to implement repository and unit of work patterns to abstract the data access layer from services and make transactions manageable. Unit tests are included to validate the refactored code.
Object Oriented Design Principles
~ How to become a SOLID programmer ~
~ A guide to make a well-designed application with Laravel ~
"Proper Object Oriented Design makes a developer's life easy, whereas bad design makes it a disaster"
The document summarizes strategies for combating software entropy through principles of software design such as the single responsibility principle, open/closed principle, and dependency inversion principle. It provides examples of how to refactor code to adhere to these principles, make the software more extensible and resilient to changes. Metrics for software design like afferent/efferent couplings and instability are also discussed to measure how well code adheres to these design best practices.
Large Language Models, Data & APIs - Integrating Generative AI Power into you...NETUserGroupBern
.NET User Group Meetup with Christian Weyer about Large Language Models, Data & APIs - Integrating Generative AI Power into your solutions - with Python and .NET
The document discusses creating secure .Net applications and implementing a zero trust security model. It introduces security context models which provide a framework for understanding authentication and authorization in modern applications. The remainder of the document outlines a demo of building a Blazor web application secured with Azure Active Directory, including authentication of external users, authorization with application roles, and using a security context diagram to communicate the security solution.
Mock Objects, Design and Dependency Inversion PrincipleP Heinonen
Mock objects are used in unit tests to simulate dependencies and allow for isolated testing. They can verify behavior and help drive design towards looser coupling between classes. The Dependency Inversion Principle and patterns like dependency injection follow the "high-level policy of asking for abstractions, not implementations" to reduce tight coupling and allow flexible reuse of modules.
This document summarizes a presentation about the open source Verilog simulator Verilator. It discusses why open source simulation is useful, provides an introduction and overview of Verilator's features, and addresses questions about getting started with and using Verilator. The presentation also covers Verilator's performance advantages over other simulators, considerations for whether Verilator may be suitable, its future development, and how users can contribute back to the project.
This document summarizes the key lessons learned from converting a legacy robotics project from Objective-C to Swift. It discusses issues with the original Objective-C code like silent nil failures, weak type safety with NSCoding, and problems with error handling. The document then covers how Swift addresses these issues through features like optional values, type safety, value types, and improved error handling with enums, throws, and do-catch. Overall, converting to Swift reduced the code base size by 75%, removed classes of bugs, found subtle bugs earlier, and allowed new features by making the code more robust.
I gotta dependency on dependency injectionmhenroid
Satisfy your desire to be a better software developer by learning how to implement Dependency Injection (DI) in your application. Dependency Injection is one of the more popular implementations of Inversion of Control (IoC) that helps to increase modularity and extensibility of software. In this lecture, we'll discuss the benefits of DI, methods for implementing and refactoring existing code to use DI, adding unit tests using MSTest and Moq, popular DI frameworks like Unity, Ninject, and Castle Windsor, as well as alternative IoC patterns and anti-patterns.
"Refactoring to SOLID Code" session presentation from
Emerging .NET Devs - October 2011 User Group Meeting.
Please note that this presentation has been simplified for publishing.
Build software like a bag of marbles, not a castle of LEGO®Hannes Lowette
If you have ever played with LEGO®, you will know that adding, removing or changing features of a completed castle isn’t as easy as it seems. You will have to deconstruct large parts to get to where you want to be, to build it all up again afterwards. Unfortunately, our software is often built the same way. Wouldn’t it be better if our software behaved like a bag of marbles? So you can just add, remove or replace them at will?
Most of us have taken different approaches to building software: a big monolith, a collection of services, a bus architecture, etc. But whatever your large scale architecture is, at the granular level (a single service or host), you will probably still end up with tightly couple code. Adding functionality means making changes to every layer, service or component involved. It gets even harder if you want to enable or disable features for certain deployments: you’ll need to wrap code in feature flags, write custom DB migration scripts, etc. There has to be a better way!
So what if you think of functionality as loose feature assemblies? We can construct our code in such a way that adding a feature is as simple as adding the assembly to your deployment, and removing it is done by just deleting the file. We would open the door for so many scenarios!
In this talk, I will explain how to tackle the following parts of your application to achieve this goal: WebAPI, Entity Framework, Onion Architecture, IoC and database migrations. And most of all, when you would want to do this. Because… ‘it depends’.
Build software like a bag of marbles, not a castle of LEGO®Hannes Lowette
Hannes Lowette discusses how to structure software code like a bag of marbles rather than a LEGO castle. The document describes challenges faced with a tightly coupled codebase and how adopting an onion architecture approach using plugins allowed for more modular and maintainable code. Key points include defining clean dependencies and interfaces, making core business logic decoupled and testable, and enabling new features to be added and removed through plugins without polluting the core codebase.
This document discusses object-oriented design principles including encapsulation, abstraction, inheritance, polymorphism, and decoupling. It then introduces the SOLID principles of object-oriented design: single responsibility principle, open/closed principle, Liskov substitution principle, interface segregation principle, and dependency inversion principle. Code examples are provided to demonstrate how to apply these principles and improve code maintainability, reusability, and testability.
This document provides an overview of the Angular CLI and how to get started with it. It discusses how to install the Angular CLI, generate an initial project using the ng new command, and an overview of the file structure and common commands like ng serve, ng test, and ng build. It also briefly touches on generating components, services, pipes and more using the ng generate command.
This document outlines the SOLID principles of object-oriented design, including Single Responsibility Principle, Open-Closed Principle, Liskov Substitution Principle, Interface Segregation Principle, and Dependency Inversion Principle. It defines each principle, provides examples, and discusses the benefits, such as increasing reusability, making code more extensible and flexible, and reducing coupling between modules. Applying these principles helps create software that is well-designed and able to easily handle changes, improving developer and customer satisfaction.
Vincent Grondin compares three mocking frameworks: Moq, JustMock, and Isolator. Mocking frameworks allow developers to isolate code under test from its infrastructure, make code behavior predictable, accelerate unit test execution by simulating code, and facilitate parallel development. Frameworks are either based on dynamic proxies or the .NET Profiler API. Without frameworks, developers must maintain mocks, dependency injection, and testable architecture in code. The document demonstrates mocking with each framework, describing important classes and methods for designating mocked methods and determining return values.
Dependency Injection in .NET applicationsBabak Naffas
This document discusses dependency injection (DI) in .NET applications. It defines DI as a design pattern that implements inversion of control to resolve dependencies. An example shows how to refactor legacy code to use DI by introducing interfaces and constructor injection. The benefits of DI include easier testing using mocks, loose coupling between classes, and centralized configuration. DI should be used across architectural and responsibility boundaries. Various strategies for implementing DI are discussed, including delegates, mock POCOs, and frameworks like Moq. Legacy code challenges around static methods and cookies are also addressed.
Pavlo Zhdanov "Mastering solid and base principles for software design"LogeekNightUkraine
The document discusses SOLID principles and other principles of software design including single responsibility, open/closed, Liskov substitution, interface segregation, and dependency inversion. It provides definitions and examples of each. The SOLID principles aim to create simple, modular, and understandable code by establishing best practices for class design. Additional design principles discussed ensure reusable, cohesive components with stable dependencies and abstractions.
original (better quality) on https://docs.google.com/presentation/d/1bnwj8CrFGo5KekONYSeIHySdkoXZiewJxkHcZjXnzkQ/
slides from OpenDaylight Summit Oct 2016 Seattle
All 23 classical GOF Design Patterns with illustrations that try to catch some essence of them.
Used in a presentation for Eindhoven Developers, March 17, 2015 http://www.meetup.com/Eindhoven-Developers-Meetup/events/220477660/
Dsug 05 02-15 - ScalDI - lightweight DI in ScalaUgo Matrangolo
ScalDI is a lightweight dependency injection (DI) framework for Scala that provides an alternative to the "Cake Pattern" approach. It defines three main concepts - Injector, Module, and Injectable - that make DI easier to use and understand compared to the Cake Pattern. Modules are used to define bindings between types and implementations using a simple DSL. The Injectable trait allows dependencies to be injected into classes in a type-safe manner. ScalDI also supports features like conditional bindings, constructor injection, lifecycle management, and integration with Play and Akka.
This document discusses Agile software development principles and patterns. It covers the following key points:
- Agile principles focus on satisfying customers, welcoming changing requirements, frequent delivery of working software, collaboration between business and developers, trusting and self-organizing teams.
- The document then discusses refactoring code using patterns like factory, abstract factory, singleton, strategy, and gateway to make the code more maintainable, reusable, and extensible.
- It shows how to implement repository and unit of work patterns to abstract the data access layer from services and make transactions manageable. Unit tests are included to validate the refactored code.
Object Oriented Design Principles
~ How to become a SOLID programmer ~
~ A guide to make a well-designed application with Laravel ~
"Proper Object Oriented Design makes a developer's life easy, whereas bad design makes it a disaster"
The document summarizes strategies for combating software entropy through principles of software design such as the single responsibility principle, open/closed principle, and dependency inversion principle. It provides examples of how to refactor code to adhere to these principles, make the software more extensible and resilient to changes. Metrics for software design like afferent/efferent couplings and instability are also discussed to measure how well code adheres to these design best practices.
Large Language Models, Data & APIs - Integrating Generative AI Power into you...NETUserGroupBern
.NET User Group Meetup with Christian Weyer about Large Language Models, Data & APIs - Integrating Generative AI Power into your solutions - with Python and .NET
The document discusses creating secure .Net applications and implementing a zero trust security model. It introduces security context models which provide a framework for understanding authentication and authorization in modern applications. The remainder of the document outlines a demo of building a Blazor web application secured with Azure Active Directory, including authentication of external users, authorization with application roles, and using a security context diagram to communicate the security solution.
This document discusses best practices for securely provisioning Azure resources using GitHub and Terraform. It covers setting up GitHub Actions workflows to deploy resources with Terraform, integrating advanced security measures with SonarCloud, and key takeaways around protecting secrets, using standards like OpenID Connect, and maintaining code quality through dependency reviews and secret scanning. An agenda is provided that includes introductions, demonstrations of GitHub Actions, Azure, and Terraform, a discussion of GitHub advanced security and SonarCloud, and concluding key takeaways.
This document discusses securing .NET Core and ASP.NET Core applications. It covers authentication and authorization topics like OpenID Connect, OAuth, sessions, and HTTPS. It provides an overview of authentication flows like OAuth's resource owner credentials flow and OpenID Connect's authorization code flow. It also discusses securing single page applications, Azure managed identities, and using libraries instead of rolling your own security implementation.
This document discusses ASP.NET Core security topics like OpenID Connect, OAuth, authentication, authorization, and policies. It provides an overview of common flows like OAuth2 resource owner credentials, OpenID Connect authorization code, and hybrid flows. It also covers implementing authorization in ASP.NET Core using policies, requirements, and handlers. Code examples for OpenID Connect hybrid flow and OAuth2 resource owner credentials flow are referenced.
Ob ASP.net MVC, NuGet oder die codebasierten Migrationen bei EF – immer mehr Konzepte und Ideen schwappen von Ruby in die .Net Welt. Wieso aber gerade von Ruby? Und was macht Rails so beliebt bei Webentwicklern?
Ruby ist wie C# eine objektorientierte Programmiersprache. Damit enden die Gemeinsamkeiten aber schon fast. Die vielen fremden Konzepte und Ansätze machen einen Einstieg in Ruby und Rails nicht gerade einfach. Aber genau in diesen Unterschieden liegen die Stärken und machen Ruby so interessant.
Dieser Vortrag gibt einen Überblick über Ruby und Rails und hilft einem sich in dieser ungewohnten Umgebung zu Recht zu finden.
Bei all dem Hype rund um NoSQL übersieht man gerne wie viele einsatzbereite Produkte darauf warten unser Entwicklerleben zu vereinfachen. Eines dieser Produkte ist RavenDB, eine dokumentenorientierte Datenbank mit Transaktionsunterstützung. Im Gegensatz zu vielen NoSQL-Lösungen ist RavenDB voll in die .Net-Welt integriert. So kann man seine Abfragen mittels LINQ formulieren und muss nicht auf JavaScript setzen. Die grosse Erfahrung von Oren Eini bei der Optimierung von NHibernate und Entity Framework wurden in RavenDB aufgenommen. So hilft eine frühzeitige Erkennung von Select N+1 Abfragen spätere Probleme in der Produktion zu verhindern. Neben diesen Eigenheiten wird uns Johnny Graber auch zeigen was es alles für Einsatzmöglichkeiten gibt. Die Flexibilität von NoSQL gepaart mit der Einfachheit von RavenDB ist dabei keineswegs nur etwas für grosse Firmen wie Google, Facebook oder Twitter - der nächste Prototyp kann davon genauso gut profitieren.
What Doctors Can Teach Us on Continuous LearningNETUserGroupBern
Do you try to keep up with all the new frameworks, patterns and trends in IT? Good luck, it’s an endless stream of things to learn. The good news: software development isn’t the only profession with this problem. Doctors face the same challenges and must keep the safety of patients in mind while working as cost-effective as possible. With much higher stakes, it’s no surprise that medicine is a highly regulated field with explicit rules on the lifelong training – rules that we can use as a source of inspiration for our training.
In this session we will look how the doctors in Switzerland organise their continuing medical education, debunk some myths about learning and figure out how we can use our daily work as a jumpstart for improvement.
Mit Entity Framework Core hat Microsoft seine Datenzugriffstechnologie neu geschrieben. Dinge wie den ObjektContext oder den Edmx-Designer gibt es nicht mehr. Im Gegenzug läuft EF Core auf Linux und Mac OS X. Für die Verwendung mit NoSQL gibt es ebenfalls Bestrebungen.
Änderungen im Cardinality Estimator SQL Server 2014NETUserGroupBern
The document discusses cardinality estimation (CE) improvements in SQL Server 2014. CE is used to estimate the number of rows returned by query predicates and joins. The new CE in SQL 2014 improves on handling multi-column predicates using an exponential back-off algorithm, fixes issues with ascending key columns, and allows troubleshooting through extended events. The changes should improve query performance but may also cause regressions. Administrators are advised to test workloads thoroughly with the new CE enabled.
This document discusses different data processing models and their characteristics for structured and unstructured data at varying scales. It compares batch processing, interactive analysis, and stream processing in terms of query runtime, data volume handled, programming models, typical users, and examples of originating projects and open source implementations. It then provides examples of how organizations can gain competitive advantage by analyzing different types of data using these approaches.
This document provides an overview and introduction to NoSQL databases, focusing on MongoDB. It begins with definitions of NoSQL and examples of companies using NoSQL databases. It then discusses the motivations behind NoSQL, including the limitations of SQL and benefits of NoSQL for scalability. The document proceeds to describe MongoDB specifically as a document-oriented database, covering its data model, networking, drivers, collections and indexing. It also covers queries, atomic operations, replication, sharding, map-reduce and GridFS for large files. Well suited use cases include archiving, content management, ecommerce, gaming and mobile applications. The document concludes with a question and contact.
This document discusses administration topics across multiple sections. It begins with questions about changing system settings and replicating configurations. It then addresses challenges in current administration landscapes and why development and operations teams don't always collaborate effectively. Different sections explore administrative roles, dimensions, drivers like legal requirements and cloud computing, and desirable tools and practices for manageable systems. The document encourages developers to consider the administrator perspective and calls administrators to share their experiences to help improve systems.
This document discusses Behavior Driven Development (BDD) using Machine.Specifications, an open source BDD framework for .NET. It provides contact information, principles of BDD MIT events with no set agenda or roles, and lists contributors. It also outlines Machine.Specifications features like templates, behaviors, reporting, and integration with tools like ReSharper, TeamCity, Selenium, and NuGet. Links are provided to get involved via GitHub, a mailing list, and sample projects.
What is Continuous Testing in DevOps - A Definitive Guide.pdfkalichargn70th171
Once an overlooked aspect, continuous testing has become indispensable for enterprises striving to accelerate application delivery and reduce business impacts. According to a Statista report, 31.3% of global enterprises have embraced continuous integration and deployment within their DevOps, signaling a pervasive trend toward hastening release cycles.
Alluxio Webinar | 10x Faster Trino Queries on Your Data PlatformAlluxio, Inc.
Alluxio Webinar
June. 18, 2024
For more Alluxio Events: https://www.alluxio.io/events/
Speaker:
- Jianjian Xie (Staff Software Engineer, Alluxio)
As Trino users increasingly rely on cloud object storage for retrieving data, speed and cloud cost have become major challenges. The separation of compute and storage creates latency challenges when querying datasets; scanning data between storage and compute tiers becomes I/O bound. On the other hand, cloud API costs related to GET/LIST operations and cross-region data transfer add up quickly.
The newly introduced Trino file system cache by Alluxio aims to overcome the above challenges. In this session, Jianjian will dive into Trino data caching strategies, the latest test results, and discuss the multi-level caching architecture. This architecture makes Trino 10x faster for data lakes of any scale, from GB to EB.
What you will learn:
- Challenges relating to the speed and costs of running Trino in the cloud
- The new Trino file system cache feature overview, including the latest development status and test results
- A multi-level cache framework for maximized speed, including Trino file system cache and Alluxio distributed cache
- Real-world cases, including a large online payment firm and a top ridesharing company
- The future roadmap of Trino file system cache and Trino-Alluxio integration
Voxxed Days Trieste 2024 - Unleashing the Power of Vector Search and Semantic...Luigi Fugaro
Vector databases are redefining data handling, enabling semantic searches across text, images, and audio encoded as vectors.
Redis OM for Java simplifies this innovative approach, making it accessible even for those new to vector data.
This presentation explores the cutting-edge features of vector search and semantic caching in Java, highlighting the Redis OM library through a demonstration application.
Redis OM has evolved to embrace the transformative world of vector database technology, now supporting Redis vector search and seamless integration with OpenAI, Hugging Face, LangChain, and LlamaIndex. This talk highlights the latest advancements in Redis OM, focusing on how it simplifies the complex process of vector indexing, data modeling, and querying for AI-powered applications. We will explore the new capabilities of Redis OM, including intuitive vector search interfaces and semantic caching, which reduce the overhead of large language model (LLM) calls.
The Rising Future of CPaaS in the Middle East 2024Yara Milbes
Explore "The Rising Future of CPaaS in the Middle East in 2024" with this comprehensive PPT presentation. Discover how Communication Platforms as a Service (CPaaS) is transforming communication across various sectors in the Middle East.
Baha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdfBaha Majid
IBM watsonx Code Assistant for Z, our latest Generative AI-assisted mainframe application modernization solution. Mainframe (IBM Z) application modernization is a topic that every mainframe client is addressing to various degrees today, driven largely from digital transformation. With generative AI comes the opportunity to reimagine the mainframe application modernization experience. Infusing generative AI will enable speed and trust, help de-risk, and lower total costs associated with heavy-lifting application modernization initiatives. This document provides an overview of the IBM watsonx Code Assistant for Z which uses the power of generative AI to make it easier for developers to selectively modernize COBOL business services while maintaining mainframe qualities of service.
Penify - Let AI do the Documentation, you write the Code.KrishnaveniMohan1
Penify automates the software documentation process for Git repositories. Every time a code modification is merged into "main", Penify uses a Large Language Model to generate documentation for the updated code. This automation covers multiple documentation layers, including InCode Documentation, API Documentation, Architectural Documentation, and PR documentation, each designed to improve different aspects of the development process. By taking over the entire documentation process, Penify tackles the common problem of documentation becoming outdated as the code evolves.
https://www.penify.dev/
What to do when you have a perfect model for your software but you are constrained by an imperfect business model?
This talk explores the challenges of bringing modelling rigour to the business and strategy levels, and talking to your non-technical counterparts in the process.
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...XfilesPro
Wondering how X-Sign gained popularity in a quick time span? This eSign functionality of XfilesPro DocuPrime has many advancements to offer for Salesforce users. Explore them now!
Building API data products on top of your real-time data infrastructureconfluent
This talk and live demonstration will examine how Confluent and Gravitee.io integrate to unlock value from streaming data through API products.
You will learn how data owners and API providers can document, secure data products on top of Confluent brokers, including schema validation, topic routing and message filtering.
You will also see how data and API consumers can discover and subscribe to products in a developer portal, as well as how they can integrate with Confluent topics through protocols like REST, Websockets, Server-sent Events and Webhooks.
Whether you want to monetize your real-time data, enable new integrations with partners, or provide self-service access to topics through various protocols, this webinar is for you!
Transforming Product Development using OnePlan To Boost Efficiency and Innova...OnePlan Solutions
Ready to overcome challenges and drive innovation in your organization? Join us in our upcoming webinar where we discuss how to combat resource limitations, scope creep, and the difficulties of aligning your projects with strategic goals. Discover how OnePlan can revolutionize your product development processes, helping your team to innovate faster, manage resources more effectively, and deliver exceptional results.
Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...The Third Creative Media
"Navigating Invideo: A Comprehensive Guide" is an essential resource for anyone looking to master Invideo, an AI-powered video creation tool. This guide provides step-by-step instructions, helpful tips, and comparisons with other AI video creators. Whether you're a beginner or an experienced video editor, you'll find valuable insights to enhance your video projects and bring your creative ideas to life.
Why Apache Kafka Clusters Are Like Galaxies (And Other Cosmic Kafka Quandarie...Paul Brebner
Closing talk for the Performance Engineering track at Community Over Code EU (Bratislava, Slovakia, June 5 2024) https://eu.communityovercode.org/sessions/2024/why-apache-kafka-clusters-are-like-galaxies-and-other-cosmic-kafka-quandaries-explored/ Instaclustr (now part of NetApp) manages 100s of Apache Kafka clusters of many different sizes, for a variety of use cases and customers. For the last 7 years I’ve been focused outwardly on exploring Kafka application development challenges, but recently I decided to look inward and see what I could discover about the performance, scalability and resource characteristics of the Kafka clusters themselves. Using a suite of Performance Engineering techniques, I will reveal some surprising discoveries about cosmic Kafka mysteries in our data centres, related to: cluster sizes and distribution (using Zipf’s Law), horizontal vs. vertical scalability, and predicting Kafka performance using metrics, modelling and regression techniques. These insights are relevant to Kafka developers and operators.
Superpower Your Apache Kafka Applications Development with Complementary Open...Paul Brebner
Kafka Summit talk (Bangalore, India, May 2, 2024, https://events.bizzabo.com/573863/agenda/session/1300469 )
Many Apache Kafka use cases take advantage of Kafka’s ability to integrate multiple heterogeneous systems for stream processing and real-time machine learning scenarios. But Kafka also exists in a rich ecosystem of related but complementary stream processing technologies and tools, particularly from the open-source community. In this talk, we’ll take you on a tour of a selection of complementary tools that can make Kafka even more powerful. We’ll focus on tools for stream processing and querying, streaming machine learning, stream visibility and observation, stream meta-data, stream visualisation, stream development including testing and the use of Generative AI and LLMs, and stream performance and scalability. By the end you will have a good idea of the types of Kafka “superhero” tools that exist, which are my favourites (and what superpowers they have), and how they combine to save your Kafka applications development universe from swamploads of data stagnation monsters!
Stork Product Overview: An AI-Powered Autonomous Delivery FleetVince Scalabrino
Imagine a world where instead of blue and brown trucks dropping parcels on our porches, a buzzing drove of drones delivered our goods. Now imagine those drones are controlled by 3 purpose-built AI designed to ensure all packages were delivered as quickly and as economically as possible That's what Stork is all about.
WWDC 2024 Keynote Review: For CocoaCoders AustinPatrick Weigel
Overview of WWDC 2024 Keynote Address.
Covers: Apple Intelligence, iOS18, macOS Sequoia, iPadOS, watchOS, visionOS, and Apple TV+.
Understandable dialogue on Apple TV+
On-device app controlling AI.
Access to ChatGPT with a guest appearance by Chief Data Thief Sam Altman!
App Locking! iPhone Mirroring! And a Calculator!!
1. Design for testability as a
way to good coding
Simone Chiaretta
Architect, Council of the EU
http://codeclimber.net.nz
Twitter: @simonech
December 9th, 2010
2. Who the hell am I?
► Simone Chiaretta
► Microsoft MVP ASP.NET
► ASP Insider
► Blogger – http://codeclimber.net.nz
► Italian ALT.NET UG Founder
► OpenSource developer
► Climber
► All Around Nice Guy
Disclaimer:"The views expressed are purely those of the speaker and may not in any circumstances be regarded as stating an official position of the Council"
3. What are we going to talk about?
► What is “Good Design”?
► Testability requirements?
► What is Design for Testability?
► What is Dependency Injection?
► What is Inversion of Control?
► How to do IoC via DI using Ninject?
► How to do IoC via DI using Unity?
► References
8. Solid: Single Responsibility Principle
(SRP)
“If a class has more then one responsibility, then the
responsibilities become coupled. Changes to one
responsibility may impair or inhibit the class’ ability
to meet the others. This kind of coupling leads to
fragile designs that break in unexpected ways when
changed.”
-Robert C. Martin
10. sOlid: Open Closed Principle (OCP)
You should be able to extend a classes behavior, without modifying it.
11. sOlid: Open Closed Principle (OCP)
“Modules that conform to the open-closed principle have
two primary attributes.
1. They are “Open For Extension”.
This means that the behavior of the module can be
extended. That we can make the module behave in new
and different ways as the requirements of the
application change, or to meet the needs of new
applications.
2. They are “Closed for Modification”.
The source code of such a module is inviolate. No one
is allowed to make source code changes to it.”
- Robert C. Martin
13. soLid: Liskov Substitution Principle
(LSP)
Derived classes must be substitutable for their base classes.
14. soLid: Liskov Substitution Principle
(LSP)
“If for each object o1 of type S there is an
object o2 of type T such that for all programs
P defined in terms of T, the behavior of P is
unchanged when o1 is substituted for o2 then S
is a subtype of T.”
- Barbara Liskov
17. solId: Interface Segregation Principle
(ISP)
Clients should not be forced to depend upon interfaces they don’t use
18. solId: Interface Segregation Principle
(ISP)
“This principle deals with the disadvantages of
‘fat’ interfaces. Classes that have ‘fat’
interfaces are classes whose interfaces are not
cohesive. In other words, the interfaces of the
class can be broken up into groups of member
functions. Each group serves a different set of
clients. Thus some clients use one group of
member functions, and other clients use the
other groups.”
- Robert Martin
21. soliD: Dependency Inversion Principle
(DIP)
“What is it that makes a design rigid, fragile
and immobile? It is the interdependence of the
modules within that design. A design is rigid
if it cannot be easily changed. Such rigidity
is due to the fact that a single change to
heavily interdependent software begins a
cascade of changes in dependent modules.”
- Robert Martin
32. The problem of strong coupling
► Rigid – Must change the Climber code to
change the Tools he uses
► Fragile – Changes to the Tools can affect the
Climbers
► Not Testable – Cannot replace the Tools with
a stub/fake when I want to test the Climber
in isolation
48. The Kernel
► Factory Method on Steroids
► Hold the configuration
► Returns objects
IKernel kernel = new StandardKernel(
new ClimbingModule());
var climber = kernel.Get<Climber>();
49. Modules
► Modules hold specific configurations
► Configuration through Fluent API
Bind<Climber>().ToSelf();
Bind<IClimbingTools>().To<QuickDraws>();
51. Different kinds of Injection
► Constructor Injection
► Property Injection
► Method Injection
► Through Factory Method
52. Attributes
► Are used to help discriminate injection
patterns
[Inject]
public IClimbingTools tools {get; set;}
[Inject]
public void GetReady(IClimbingTools tools)
58. Finally Some Testing
► No need to use IoC any more (and you should
not)
MockTools tools = new MockTools();
Climber climber = new Climber(tools);
climber.Climb();
Assert.IsTrue(tools.Placed);
64. Funq
► By Daniel Cazzulino (of Moq fame)
► The fastest IoC available
► Doesn’t use reflection
► Always write factory method
container.Register<IClimbingTools>(
c => new QuickDraws());
container.Register(
c => new Climber(
c.Resolve<IClimbingTools>()));
67. IoC in other hosts
► IoC shines when activation is already
delegated to factories
– ASP.NET MVC
– WCF
► Requires changes in the default “object
factory”
– ControllerFactory
– ServiceHostFactory
70. Call for Actions
► Think about a project you worked on
► Think about any maintainabily/change issue
you had:
– Most likely they would have been solved with DI/IoC
► Think how DI/IoC could have helped
71. Main takeaways
► DI/IoC helps building service oriented
applications
► DI/IoC helps managing dependencies
► DI/IoC helps bulding highly cohese, loose
coupled code while maintaling encapsulation
75. Rating
If you liked this talk, please consider rating
it:
http://speakerrate.com/talks/5193-design-for-testability-as-a-
way-to-good-coding
74 Disclaimer:"The views expressed are purely those of the speaker and may not in any circumstances be regarded as stating an
official position of the Council"
Editor's Notes
Cohesion:
“A measure of how strongly-related and focused the various responsibilities of a software module are” - Wikipedia
Coupling:
“The degree to which each program module relies on each one of the other modules” – Wikipedia
Encapsulation:
“The hiding of design decisions in a computer program that are most likely to change” - Wikipedia
Jenga game = tower where if you remove one piece, all the tower can collapse
Example might be an email sending application that sends email taking the text from an external file:
If you read the text and send the email from the same class you are breaking the SRP principle.
It would be better to separate the reading part from the sending one.
It’s all about behaviours and pre/post conditions:
A derived type can only weaken pre-conditions
A derived type can only streghten post-conditions
Imagine you want to put templates in a database: you cannot just write a “file” reader that uses a database as it will need a connection string, and the user should do different things based on the type of the reader, thus making the substitution not transparent.
Here it would have been better to completely separate the two things, and have a database reader and a file reader.
After adding the Database reader, we now have the email sending service that can both read file and databases, and obviously sending emails.
So it’s better to split these responsibilities in different interfaces.
Finally, instead of having the single object create their own dependencies, it is the top-most client that configures the system for what it needs.