CSE681 - Software Modeling & Analysis

Lecture #12 - Projects #3, #4, and #5

Requirements and concepts

Web Resourses:

Content:

We will discuss grading of Project #1 and Projects #3, #4, and #5 for most of this lecture.
  1. The Syllabus describes topics to be covered, reading material for you to digest before coming to class, and due dates for the assigned projects.

  2. Project #1, Project #2, Project #3, Project #4, Project #5, Project2HelpF15, CSharpAnalyzer
  3. Projects Discussion:

    • Project #2 - Instructor's Design and Implementation (this will grow into a new blog eventually):
      • generics, interfaces, and reflection:

        • Trade-offs between minimizing type specific code and performance and complexity.
        • Trade-offs between payload wrappers and extension methods.
        • Effects on cloning and persistance.
      • Queries:

        • Lambdas as query predicates => uniform query interface.
        • Why use DBFactory aka VirtualDB? Why immutable interface?
      • Views:

        • Configuring Display to accept lambdas as views => uniform view interface.
      • Integrity checks:

        • Key value deletions may result in child keys that are no longer held in the database.
          Should we remove those child keys? Should we refuse deletion? Should we simply delete?
        • If we delete child keys we destroy information!
          We may want to be able to represent dependencies outside of the current database context.
          You can't do that if you mindlessly remove child keys with no destination in the database.
        • Remember that a query using a key not in the database will simply result in a false return value and null value returned from bool getValue(Key key, out Value value).
          No crash and burn!
        • The sensible design choice may depend on the application!
        • The moral of the story is: Don't do as everyone says you should do without thinking about the consequences.
      • Other Design Issues:

        • Should we use DBEngine<Key, DBElement<Key, Data>> or DBEngine<Key, Data>?
          Using aliases - see TestExec.
        • Can we implement transactions? Sure - it's not to difficult. Should we?
          Note that transaction processing can be an add-on. It doesn't have to be built in.
        • Can we implement triggers? Sure. Should we?
      • Uses:

        • Using noSqlDb as document store for Repository.
        • Using noSqlDb as key/value store for TestHarness.
        • Using noSqlDb as template store for services.
    • Project #3 - Reusing content:
      • Reusing content from Projects #1 and #2
      • Using Instructor's Solution
        • Look for techniques to improve your own code - sure.
        • Use the whole thing - well there is a cost for that.
    • Project #4 - Concurrency and Remote Access.
      • Queued access and the Single-Threaded Apartment model.
      • Message passing - need to interpret messages to change db state.
      • Performance measurement with high resolution timer.
    • Project #5 - Evaluation Matrix and Integration.
      • Get started early!
      • Reuse content from Projects #1, #2, #3, and #4.
  4. UI and Enterprise Patterns

  5. Lecture Take-aways:

    The most important things we discussed are: