I have been fortunate to attend this year’s Anglebrackets conference in Las Vegas. (See my coverage of Day 1 here and Day 2 here.)
The following are my notes from the Day 3 keynote, “Conversations with Microsoft.”
The speaker: Steve Guggenheimer, corporate VP and chief evangelist.
A lot of changes at Microsoft over last year. New CEO, Satya Nadella
Not changed: We always be partner-led
Our Core – productivity platform for mobile-first, cloud-first world
4 engineering units at MS
- Devices platform.
Converging Xbox, Windows , WP and RT into single platform. Universal apps and One Windows.
VS 2015 preview is out. Demo: creating universal app from template.
- First-party devices (Surface, Lumia phones, Band, etc).
- First-party services (Office 365, Bing, Yammer, Skype, et). Cross-platform APIs and SDKs.
- Azure
Microsoft Developer approach:
- Innovation
- Agility
- Openness
Demo: VS2015 – targeting multiple devices with Apache Cordova plugin for VS. Using Android emulator for VS.
Demo: using remote IE (Azure service for testing on IE) on Mac, iPad and Android tablet.
Announcement: Open sourcing .NET Core Runtime and Framework. .NET running on Linux and Mac. Free VS 2013 Community edition.
Session: Implementing EF models for DDD Bounded Contexts
Speaker: Julie Lerman
Hard to ignore ORM concerns inside bounded context.
Two ways to approach DDD:
- “ivory tower” – two completely different models, one for domain, one for persistence, then map between them
- Feed domain model to the ORM framework
Bounded Context
Ubiquitous Language – terminology specific to the bounded context
Bounded context means breaking things apart and separating.
Problem: re-using is good, duplication is bad. But when re-used code started to re-purposed (same thing started have different meanings in different context) this is bad too.
Example: Customer Management. when is a Customer a Customer? In customer service is customer. In Sales it’s Purchaser, in Shipping it’s Recipient, in Marketing it’s either Prospect or Existing Customer, in Accounting it’s Account Holder. It would make sense to track customer with contact id, at least this is common.
Resource: http://Github.com/julielerman/TEE14Demo
Contact entity in other bounded context doesn’t inherit from Contact in another BC, but they both inheriting from common classes as WriteableEntity or ReadOnlyEntity. Simple classes like Address are reused.
Private setters for properties, factory methods used. EF can use private setters just fine.
Don’t reference one BC from another.
Shared Types
Shared Kernel
- Tightly coordinated Entities and Value Objects
- Common schema and behavior
- Reduce duplication, don’t eliminate it
Inheritance
- Infrastructure
- Not domain types
- Favor composition (interfaces) over inheritance. Inheritance is good for infrastructure types (like Address), but not for domain types (Customer).
Data Model != Domain model
Shared Data
How to map different entities in the different bound contexts to the same table (Customers)?
Green Field: Existing Database
- Database to EDMX or Code First
Different DB Contexts for different BCs. Have different Customers table in different DB Ctx. Migrations are not possible.
Possibility: Different schema (or different databases) for different BCs.
Track changes in entities and generate events. Use these events to synchronize data in different databases (via message queue).
Session: Developing with ASP.NET vNext
Speaker: Taylor Mullen
Resource: www.asp.net/vnext
Global.json – list of source folders
Everything is light-weight and opt-in.
Project.json – combines project file and packages file
Startup.cs. Configure the framework features. Everything is opt-in.
No need to build. Builds on demand.
By default is completelly barebones – no framework (MVC or other) is forced upon.
Possible to use multiple different frameworks at once, just need to configure mapping.
MVC: controller doesn’t have to inherit from Controller.
Dependency injection is built in and automatic, everything could be declared as interface, then added [activate] attribute. Also need to configure the resolution with AddService();
@inject Razor statement for adding dependency injected calsses to view. This way it’s possible to derive View from something else than Razer view and then inject HtmlHelper, for example.
No need to use Html Helpers any more to create form and controls. Fluent html tags, no need to write C# code in the view, , need to reference TagHelpers and @addtaghelpers
Session: Visual Studio and Cordova
Speaker – Lino Tardos, MVP
VS tools for Cordova:-
- released 11/12/2014
- Avaiable is VS update 4
What is Cordova?
- Open source version of PhoneGap
- Allows to write apps for Android, iOS and Windows platforms
- Apps are developed with html5, js and css only
- Apps are run natively on device
How Cordova works:
- Windows and Android
- VS
- MS build
- VS-MDA
- Cordva
- Native tools
- iOS
- VS
- MS build
- VS-MDA
- VS-MDA Remote (OSX)
- Cordova (OSX)
- Xcode (OSX)
Demo: create Cordova app from VS template
Demo: using Cordova + Kendo UI
Demo: Cordova application with Angular JS
Resources: www.falafel.com
Keynote: Managing programmers
Speaker – Douglas Crockford
- Programmer
- Manager of programmers
- Manager of managers of programmers
Programmer:
- Computer programmer
- Computer Scientist
- Software Engineer
- Software Developer
- Coder
- Hacker
Not like the other kids (can’t manage them the same as other people)
Creative
Good programmers vs bad: 1:10 or 1:100
Some programmers have negative contribution
Two comics:
- Dilbert
- Xkcd
Ineffective metrics
- Lines of code
- Introduction of Bugs
- Fixing bugs
Programming is not manufacturing
Discovery
Trial and error
Waterfall – doesn’t work
Agile – doesn’t exist
Directed Anarchy – working
Most managers want to see programmers to look busy and good attitude.
Good measure: read code. Daily code reading. Readability.
Hiring: make candidate to bring the piece of code and defend if with the team.
Programmers look like office workers, but they are creatives.
Office structure
Flow: private offices, free of distraction.
Communication: bullpens (startups)
Worst possible: cubicles and open space.
Ideal
- Large project rooms with whiteboards
- Lots of meeting rooms, different sizes, round tables
- Classrooms to continuously train people
- Library (silent)
- Padded cells
- Diner, booths with power plugs
- Food
- Bunk room
- Shower
- Day care
Programmers should own their own machines
Natural enemies of programmers:
- Complexity. Don’t overcomplicate software.
- Imperfection. Try to use best practices to minimize bugs.
- Time. Premature optimization is bad. Measure, cut, measure.
- Mismanagement. Programmers don’t like to be mismanaged.
- Themselves. Encourage education, prevent “informed ignorance”.
Counterproductive measures:
- add staff
- Cancel continuous education
- Hit intermediate milestones
- Extend workday
- Panic mode
Productive:
- Talented staff
- Clear, stable requirements
- Minimal distractions
- Focus on quality
- Sufficient time
“if it’s stupid we won’t do it”. Programmers want to deliver quality product.