SlideShare a Scribd company logo
Feature Folders
Anthony Steele

@AnthonySteele
Anthony.Steele@7digital.com
Large projects
Why was it organised this way?
Default ASP MVC organisation isn’t good for large projects.
Organise related things together.
Uncle Bob Martin

http://blog.8thlight.com/uncle-bob/2011/09/30/Screaming-Architecture.html

“Imagine that you are looking at the blueprints of a building. What do these
plans tell you?
What is your architecture screaming about?”
What is your architecture making obvious
“I am an ASP MVC app? I have controllers and views!”
Or
“I am an online music catalogue, A payroll system, etc“
Make it shout about the problem domain not the framework.
What’s in a screaming name?
I don’t like this name.
The architecture should not be wailing in
pain, it should be running smoothly.
Is there a better name for this idea?
How about…
• Obvious architecture
• Blatant domain
• Lucid domain architecture
• The “what are you making plain?” principle
• Putting related stuff together and naming it well
• Feature folders?
Feature folders
This is a broad idea. Narrow our focus!
“obvious architecture” idea implies that code should be arranged
with related code for a feature in the same folder.
How?
In ASP MVC
You need a custom controller locator and custom view locator.
Good news for the controller locator:
Your Ioc Container can do it.
Not as good news for the view locator. You need some custom code.
Demo In Visual studio…
In ServiceStack or Nancy
These frameworks support feature folders without customisation.
Just do it.
Demo In Visual Studio
Repositories / Data Stores / Services
• Still have a “data layer” where access to DB/ Web services becomes
the main concern.
• Split at this boundary where the concerns, dependencies change
• Vocabulary of tests change at the boundary too.
• But inside that project, still have related stuff together.
In Angular
• Even further integrated by feature:
• 2 levels of tests live in with the js “codebehind” and the html markup.
• The build process does different things with them.
Sublime text demo
Conclusion
• Some things can easily be found by the tooling
• But the problem domain can’t
• Make that explicit
• Put conceptually related things together
Thank you!
Anthony Steele

@AnthonySteele
anthony.steele@7digital.com

More Related Content

What's hot

What's hot (20)

Design patterns in test automation
Design patterns in test automationDesign patterns in test automation
Design patterns in test automation
 
iOS development best practices
iOS development best practicesiOS development best practices
iOS development best practices
 
AD105 - OneUI.. really? Is that because you don't know about Twitter Bootstrap?
AD105 - OneUI.. really? Is that because you don't know about Twitter Bootstrap?AD105 - OneUI.. really? Is that because you don't know about Twitter Bootstrap?
AD105 - OneUI.. really? Is that because you don't know about Twitter Bootstrap?
 
Mini training- Scenario Driven Design
Mini training- Scenario Driven DesignMini training- Scenario Driven Design
Mini training- Scenario Driven Design
 
Headless cms architecture
Headless cms architectureHeadless cms architecture
Headless cms architecture
 
Untangling - fall2017 - week 7
Untangling - fall2017 - week 7Untangling - fall2017 - week 7
Untangling - fall2017 - week 7
 
Getting the best value out of your unit tests
Getting the best value out of your unit testsGetting the best value out of your unit tests
Getting the best value out of your unit tests
 
Workflows - The Rise of the Machines
Workflows - The Rise of the MachinesWorkflows - The Rise of the Machines
Workflows - The Rise of the Machines
 
Mvc
MvcMvc
Mvc
 
Fast Track introduction to ASP.NET MVC
Fast Track introduction to ASP.NET MVCFast Track introduction to ASP.NET MVC
Fast Track introduction to ASP.NET MVC
 
Automated perf optimization - jQuery Conference
Automated perf optimization - jQuery ConferenceAutomated perf optimization - jQuery Conference
Automated perf optimization - jQuery Conference
 
Building JavaScript Apps for Force.com with EmberJS
Building JavaScript Apps for Force.com with EmberJSBuilding JavaScript Apps for Force.com with EmberJS
Building JavaScript Apps for Force.com with EmberJS
 
Php Indonesia x Bliblidotcom - Architecting Scalable CSS
Php Indonesia x Bliblidotcom - Architecting Scalable CSSPhp Indonesia x Bliblidotcom - Architecting Scalable CSS
Php Indonesia x Bliblidotcom - Architecting Scalable CSS
 
Untangling the web11
Untangling the web11Untangling the web11
Untangling the web11
 
Using Chat Automation - ChatOps
Using Chat Automation - ChatOpsUsing Chat Automation - ChatOps
Using Chat Automation - ChatOps
 
SenchaCon 2016: The Changing Landscape of JavaScript Testing - Joel Watson an...
SenchaCon 2016: The Changing Landscape of JavaScript Testing - Joel Watson an...SenchaCon 2016: The Changing Landscape of JavaScript Testing - Joel Watson an...
SenchaCon 2016: The Changing Landscape of JavaScript Testing - Joel Watson an...
 
Aspect oriented programming
Aspect oriented programmingAspect oriented programming
Aspect oriented programming
 
WordCamp Kent 2019 - WP 101: Themes & Plugins: What are they, and where do I ...
WordCamp Kent 2019 - WP 101: Themes & Plugins: What are they, and where do I ...WordCamp Kent 2019 - WP 101: Themes & Plugins: What are they, and where do I ...
WordCamp Kent 2019 - WP 101: Themes & Plugins: What are they, and where do I ...
 
Why You Need a Front End Developer
Why You Need a Front End DeveloperWhy You Need a Front End Developer
Why You Need a Front End Developer
 
Charts, PDFs, and PHP
Charts, PDFs, and PHPCharts, PDFs, and PHP
Charts, PDFs, and PHP
 

Similar to Feature folders

Sitting in the Driver's Seat
Sitting in the Driver's SeatSitting in the Driver's Seat
Sitting in the Driver's Seat
Jack Moffett
 
Farewell XSL, Welcome Display Templates SPSNL
Farewell XSL, Welcome Display Templates SPSNLFarewell XSL, Welcome Display Templates SPSNL
Farewell XSL, Welcome Display Templates SPSNL
Elio Struyf
 

Similar to Feature folders (20)

BackboneJS
BackboneJSBackboneJS
BackboneJS
 
Framing the Argument: How to Scale Faster with NoSQL
Framing the Argument: How to Scale Faster with NoSQLFraming the Argument: How to Scale Faster with NoSQL
Framing the Argument: How to Scale Faster with NoSQL
 
50 Shades of Fail KScope16
50 Shades of Fail KScope1650 Shades of Fail KScope16
50 Shades of Fail KScope16
 
Codeigniter
CodeigniterCodeigniter
Codeigniter
 
Sitting in the Driver's Seat
Sitting in the Driver's SeatSitting in the Driver's Seat
Sitting in the Driver's Seat
 
Features, Exportables & You
Features, Exportables & YouFeatures, Exportables & You
Features, Exportables & You
 
Java Design Patterns Tutorial | Edureka
Java Design Patterns Tutorial | EdurekaJava Design Patterns Tutorial | Edureka
Java Design Patterns Tutorial | Edureka
 
learn mvc project in 7 day
learn mvc project in 7 daylearn mvc project in 7 day
learn mvc project in 7 day
 
Boilerplates: Step up your Web Development Process
Boilerplates: Step up your Web Development ProcessBoilerplates: Step up your Web Development Process
Boilerplates: Step up your Web Development Process
 
Pearls and Must-Have Tools for the Modern Web / .NET Developer
Pearls and Must-Have Tools for the Modern Web / .NET DeveloperPearls and Must-Have Tools for the Modern Web / .NET Developer
Pearls and Must-Have Tools for the Modern Web / .NET Developer
 
Bootstrap for Beginners
Bootstrap for BeginnersBootstrap for Beginners
Bootstrap for Beginners
 
Weekly Meeting: Basic Design Pattern
Weekly Meeting: Basic Design PatternWeekly Meeting: Basic Design Pattern
Weekly Meeting: Basic Design Pattern
 
Software Architecture and Architectors: useless VS valuable
Software Architecture and Architectors: useless VS valuableSoftware Architecture and Architectors: useless VS valuable
Software Architecture and Architectors: useless VS valuable
 
Add-On Development: EE Expects that Every Developer will do his Duty
Add-On Development: EE Expects that Every Developer will do his DutyAdd-On Development: EE Expects that Every Developer will do his Duty
Add-On Development: EE Expects that Every Developer will do his Duty
 
presentation
presentationpresentation
presentation
 
Farewell XSL, Welcome Display Templates SPSNL
Farewell XSL, Welcome Display Templates SPSNLFarewell XSL, Welcome Display Templates SPSNL
Farewell XSL, Welcome Display Templates SPSNL
 
DITA 2.0: A NOT backwards compatible release
DITA 2.0: A NOT backwards compatible releaseDITA 2.0: A NOT backwards compatible release
DITA 2.0: A NOT backwards compatible release
 
JSLink for ITPros - SharePoint Saturday Jersey
JSLink for ITPros - SharePoint Saturday JerseyJSLink for ITPros - SharePoint Saturday Jersey
JSLink for ITPros - SharePoint Saturday Jersey
 
MWLUG 2015 - An Introduction to MVC
MWLUG 2015 - An Introduction to MVCMWLUG 2015 - An Introduction to MVC
MWLUG 2015 - An Introduction to MVC
 
SharePoint 2013 Sandbox Solutions for On Premise or Office 365
SharePoint 2013 Sandbox Solutions for On Premise or Office 365SharePoint 2013 Sandbox Solutions for On Premise or Office 365
SharePoint 2013 Sandbox Solutions for On Premise or Office 365
 

Recently uploaded

一比一原版UPenn毕业证宾夕法尼亚大学毕业证成绩单如何办理
一比一原版UPenn毕业证宾夕法尼亚大学毕业证成绩单如何办理一比一原版UPenn毕业证宾夕法尼亚大学毕业证成绩单如何办理
一比一原版UPenn毕业证宾夕法尼亚大学毕业证成绩单如何办理
beduwt
 
Digital/Computer Paintings as a Modern- day Igbo Artists’ vehicle for creatin...
Digital/Computer Paintings as a Modern- day Igbo Artists’ vehicle for creatin...Digital/Computer Paintings as a Modern- day Igbo Artists’ vehicle for creatin...
Digital/Computer Paintings as a Modern- day Igbo Artists’ vehicle for creatin...
ikennaaghanya
 
一比一原版(DU毕业证)迪肯大学毕业证成绩单
一比一原版(DU毕业证)迪肯大学毕业证成绩单一比一原版(DU毕业证)迪肯大学毕业证成绩单
一比一原版(DU毕业证)迪肯大学毕业证成绩单
zvaywau
 
THE SYNERGY BETWEEN TRADITIONAL “ULI” BODY PAINTING SYMBOLS AND DIGITAL ART.
THE SYNERGY BETWEEN TRADITIONAL “ULI” BODY PAINTING SYMBOLS AND DIGITAL ART.THE SYNERGY BETWEEN TRADITIONAL “ULI” BODY PAINTING SYMBOLS AND DIGITAL ART.
THE SYNERGY BETWEEN TRADITIONAL “ULI” BODY PAINTING SYMBOLS AND DIGITAL ART.
ikennaaghanya
 
一比一原版NYU毕业证纽约大学毕业证成绩单如何办理
一比一原版NYU毕业证纽约大学毕业证成绩单如何办理一比一原版NYU毕业证纽约大学毕业证成绩单如何办理
一比一原版NYU毕业证纽约大学毕业证成绩单如何办理
beduwt
 
一比一原版UC Berkeley毕业证加利福尼亚大学|伯克利分校毕业证成绩单如何办理
一比一原版UC Berkeley毕业证加利福尼亚大学|伯克利分校毕业证成绩单如何办理一比一原版UC Berkeley毕业证加利福尼亚大学|伯克利分校毕业证成绩单如何办理
一比一原版UC Berkeley毕业证加利福尼亚大学|伯克利分校毕业证成绩单如何办理
beduwt
 
一比一原版(GU毕业证)格里菲斯大学毕业证成绩单
一比一原版(GU毕业证)格里菲斯大学毕业证成绩单一比一原版(GU毕业证)格里菲斯大学毕业证成绩单
一比一原版(GU毕业证)格里菲斯大学毕业证成绩单
zvaywau
 

Recently uploaded (20)

acting board rough title here lolaaaaaaa
acting board rough title here lolaaaaaaaacting board rough title here lolaaaaaaa
acting board rough title here lolaaaaaaa
 
一比一原版UPenn毕业证宾夕法尼亚大学毕业证成绩单如何办理
一比一原版UPenn毕业证宾夕法尼亚大学毕业证成绩单如何办理一比一原版UPenn毕业证宾夕法尼亚大学毕业证成绩单如何办理
一比一原版UPenn毕业证宾夕法尼亚大学毕业证成绩单如何办理
 
Digital/Computer Paintings as a Modern- day Igbo Artists’ vehicle for creatin...
Digital/Computer Paintings as a Modern- day Igbo Artists’ vehicle for creatin...Digital/Computer Paintings as a Modern- day Igbo Artists’ vehicle for creatin...
Digital/Computer Paintings as a Modern- day Igbo Artists’ vehicle for creatin...
 
indian folk dances and their significance
indian folk dances and their significanceindian folk dances and their significance
indian folk dances and their significance
 
一比一原版(DU毕业证)迪肯大学毕业证成绩单
一比一原版(DU毕业证)迪肯大学毕业证成绩单一比一原版(DU毕业证)迪肯大学毕业证成绩单
一比一原版(DU毕业证)迪肯大学毕业证成绩单
 
Winning Shots from Siena International Photography Awards 2015
Winning Shots from Siena International Photography Awards 2015Winning Shots from Siena International Photography Awards 2015
Winning Shots from Siena International Photography Awards 2015
 
Memory Rental Store - The Chase (Storyboard)
Memory Rental Store - The Chase (Storyboard)Memory Rental Store - The Chase (Storyboard)
Memory Rental Store - The Chase (Storyboard)
 
The Legacy of Breton In A New Age by Master Terrance Lindall
The Legacy of Breton In A New Age by Master Terrance LindallThe Legacy of Breton In A New Age by Master Terrance Lindall
The Legacy of Breton In A New Age by Master Terrance Lindall
 
THE SYNERGY BETWEEN TRADITIONAL “ULI” BODY PAINTING SYMBOLS AND DIGITAL ART.
THE SYNERGY BETWEEN TRADITIONAL “ULI” BODY PAINTING SYMBOLS AND DIGITAL ART.THE SYNERGY BETWEEN TRADITIONAL “ULI” BODY PAINTING SYMBOLS AND DIGITAL ART.
THE SYNERGY BETWEEN TRADITIONAL “ULI” BODY PAINTING SYMBOLS AND DIGITAL ART.
 
Memory Rental Store - The Ending(Storyboard)
Memory Rental Store - The Ending(Storyboard)Memory Rental Store - The Ending(Storyboard)
Memory Rental Store - The Ending(Storyboard)
 
2137ad Merindol Colony Interiors where refugee try to build a seemengly norm...
2137ad  Merindol Colony Interiors where refugee try to build a seemengly norm...2137ad  Merindol Colony Interiors where refugee try to build a seemengly norm...
2137ad Merindol Colony Interiors where refugee try to build a seemengly norm...
 
2137ad - Characters that live in Merindol and are at the center of main stories
2137ad - Characters that live in Merindol and are at the center of main stories2137ad - Characters that live in Merindol and are at the center of main stories
2137ad - Characters that live in Merindol and are at the center of main stories
 
Inter-Dimensional Girl Boards Segment (Act 3)
Inter-Dimensional Girl Boards Segment (Act 3)Inter-Dimensional Girl Boards Segment (Act 3)
Inter-Dimensional Girl Boards Segment (Act 3)
 
Nagpur_❤️Call Girl Starting Price Rs 12K ( 7737669865 ) Free Home and Hotel D...
Nagpur_❤️Call Girl Starting Price Rs 12K ( 7737669865 ) Free Home and Hotel D...Nagpur_❤️Call Girl Starting Price Rs 12K ( 7737669865 ) Free Home and Hotel D...
Nagpur_❤️Call Girl Starting Price Rs 12K ( 7737669865 ) Free Home and Hotel D...
 
一比一原版NYU毕业证纽约大学毕业证成绩单如何办理
一比一原版NYU毕业证纽约大学毕业证成绩单如何办理一比一原版NYU毕业证纽约大学毕业证成绩单如何办理
一比一原版NYU毕业证纽约大学毕业证成绩单如何办理
 
CLASS XII- HISTORY-THEME 4-Thinkers, Bes
CLASS XII- HISTORY-THEME 4-Thinkers, BesCLASS XII- HISTORY-THEME 4-Thinkers, Bes
CLASS XII- HISTORY-THEME 4-Thinkers, Bes
 
Tackling Poverty in Nigeria, by growing Art-based SMEs
Tackling Poverty in Nigeria, by growing Art-based SMEsTackling Poverty in Nigeria, by growing Art-based SMEs
Tackling Poverty in Nigeria, by growing Art-based SMEs
 
一比一原版UC Berkeley毕业证加利福尼亚大学|伯克利分校毕业证成绩单如何办理
一比一原版UC Berkeley毕业证加利福尼亚大学|伯克利分校毕业证成绩单如何办理一比一原版UC Berkeley毕业证加利福尼亚大学|伯克利分校毕业证成绩单如何办理
一比一原版UC Berkeley毕业证加利福尼亚大学|伯克利分校毕业证成绩单如何办理
 
ART FORMS OF KERALA: TRADITIONAL AND OTHERS
ART FORMS OF KERALA: TRADITIONAL AND OTHERSART FORMS OF KERALA: TRADITIONAL AND OTHERS
ART FORMS OF KERALA: TRADITIONAL AND OTHERS
 
一比一原版(GU毕业证)格里菲斯大学毕业证成绩单
一比一原版(GU毕业证)格里菲斯大学毕业证成绩单一比一原版(GU毕业证)格里菲斯大学毕业证成绩单
一比一原版(GU毕业证)格里菲斯大学毕业证成绩单
 

Feature folders

  • 2.
  • 3. Large projects Why was it organised this way? Default ASP MVC organisation isn’t good for large projects. Organise related things together.
  • 4. Uncle Bob Martin http://blog.8thlight.com/uncle-bob/2011/09/30/Screaming-Architecture.html “Imagine that you are looking at the blueprints of a building. What do these plans tell you? What is your architecture screaming about?”
  • 5. What is your architecture making obvious “I am an ASP MVC app? I have controllers and views!” Or “I am an online music catalogue, A payroll system, etc“ Make it shout about the problem domain not the framework.
  • 6. What’s in a screaming name? I don’t like this name. The architecture should not be wailing in pain, it should be running smoothly. Is there a better name for this idea?
  • 7. How about… • Obvious architecture • Blatant domain • Lucid domain architecture • The “what are you making plain?” principle • Putting related stuff together and naming it well • Feature folders?
  • 8. Feature folders This is a broad idea. Narrow our focus! “obvious architecture” idea implies that code should be arranged with related code for a feature in the same folder.
  • 9. How? In ASP MVC You need a custom controller locator and custom view locator. Good news for the controller locator: Your Ioc Container can do it. Not as good news for the view locator. You need some custom code. Demo In Visual studio…
  • 10. In ServiceStack or Nancy These frameworks support feature folders without customisation. Just do it. Demo In Visual Studio
  • 11. Repositories / Data Stores / Services • Still have a “data layer” where access to DB/ Web services becomes the main concern. • Split at this boundary where the concerns, dependencies change • Vocabulary of tests change at the boundary too. • But inside that project, still have related stuff together.
  • 12. In Angular • Even further integrated by feature: • 2 levels of tests live in with the js “codebehind” and the html markup. • The build process does different things with them. Sublime text demo
  • 13. Conclusion • Some things can easily be found by the tooling • But the problem domain can’t • Make that explicit • Put conceptually related things together