Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

260 refactor pass tuple types as a result from expressionbuilder not via the typemanager #523

Conversation

baseTwo
Copy link
Collaborator

@baseTwo baseTwo commented Sep 10, 2024

Work for #260

TypeManager did not have a single responsibility, so determined that it's sole purpose was to create and cache dynamic tuples. It included a dependency on TypeResolver, which it didn't use itself. This was removed, if a service needs TypeResolver, they must include it directly (see change in AssemblyCompiler)

TypeManager was renamed to TupleBuilderCache.

It is likely that the tuple build cache must not be re-used over librarysets, therefore its lifetime was changed to scoped. This also affects the expression builders and pipeline services to be scoped.

Additional

  • Explicitly injecting services into. *ExpressionBuilderContext types and removing the internal fields from the *ExpressionBuilder types. Opt to create factory methods for contexts from the builders instead.
  • Removed the internal interfaces per *ExpressionBuilderContext, instead injecting the actual context.
  • For the PackagerCLI, moved out various concerns from the Program.cs file into separate initializers. Similar to the service initializers in the other projects, but additionally including configuration, logging, and commandline switches as well

CQL SDK Service Dependencies

Remarks

  • Excl Logger and Options
  • Cyan classes indicate scoped services
  • All others are singleton services
  • Classes are group by their respective projects
%%{init: {
    'theme': 'base', 
    'themeVariables':{  
      'primaryColor': '#222',
      'primaryTextColor': '#fff',
      'primaryBorderColor': 'gray',
      'lineColor': '#888'
}}}%%

classDiagram

    direction LR

    namespace Compiler {
        class LibrarySetExpressionBuilder { }    
        class LibraryExpressionBuilder { }    
        class ExpressionBuilder { }    
        class ExpressionBuilderSettings { }    
        class TupleBuilderCache { }
        class CqlContextBinder { }
        class CqlOperatorsBinder { }
    }

    namespace CodeGeneration {
        class CSharpCodeStreamPostProcessor { }
        class WriteToFileCSharpCodeStreamPostProcessor { }
        class StubCSharpCodeStreamPostProcessor { }
        class AssemblyDataPostProcessor { }
        class WriteToFileAssemblyDataPostProcessor { }
        class StubAssemblyDataPostProcessor { }
        class TypeToCSharpConverter { }
        class CSharpLibrarySetToStreamsWriter { }
        class AssemblyCompiler { }
    }

    namespace Packaging {
        class FhirResourcePostProcessor { }
        class WriteToFileFhirResourcePostProcessor { }
        class StubFhirResourcePostProcessor { }
        class CqlToResourcePackagingPipeline { }
        class ResourcePackager { }
    }

    namespace Abstraction {
        class TypeResolver { }
    }

    namespace Runtime {
        class BaseTypeResolver { }
    }

    namespace Fhir {
        class FhirTypeResolver { }
        class ModelInspector { }
    }

    namespace Conversion {
        class TypeConverter { }
    }

    %% Style Scoped Types as Cyan

    style LibrarySetExpressionBuilder fill:#055
    style LibraryExpressionBuilder fill:#055
    style ExpressionBuilder fill:#055
    style TupleBuilderCache fill:#055
    style CqlToResourcePackagingPipeline fill:#055

    %% Inheritance  

    BaseTypeResolver --> TypeResolver : inherits
    FhirTypeResolver --> BaseTypeResolver : inherits
    WriteToFileCSharpCodeStreamPostProcessor --> CSharpCodeStreamPostProcessor : inherits
    StubCSharpCodeStreamPostProcessor --> CSharpCodeStreamPostProcessor : inherits
    WriteToFileAssemblyDataPostProcessor --> AssemblyDataPostProcessor : inherits
    StubAssemblyDataPostProcessor --> AssemblyDataPostProcessor : inherits
    WriteToFileFhirResourcePostProcessor --> FhirResourcePostProcessor : inherits
    StubFhirResourcePostProcessor --> FhirResourcePostProcessor : inherits

    %% Dependencies

    LibraryExpressionBuilder ..> LibrarySetExpressionBuilder : injected

    ExpressionBuilder ..> LibraryExpressionBuilder : injected

    TypeResolver ..> ExpressionBuilder : injected
    CqlOperatorsBinder ..> ExpressionBuilder : injected
    TupleBuilderCache ..> ExpressionBuilder : injected
    CqlContextBinder ..> ExpressionBuilder : injected
    ExpressionBuilderSettings ..> ExpressionBuilder : injected

    TypeResolver ..> CqlOperatorsBinder : injected
    TypeConverter ..> CqlOperatorsBinder : injected

    ModelInspector ..> TypeConverter : injected  

    TypeToCSharpConverter ..> CSharpLibrarySetToStreamsWriter : injected

    AssemblyDataPostProcessor ..> AssemblyCompiler : injected\n(optional)
    CSharpCodeStreamPostProcessor ..> AssemblyCompiler : injected\n(optional)
    CSharpLibrarySetToStreamsWriter ..> AssemblyCompiler : injected
    TypeResolver ..> AssemblyCompiler : injected

    TypeResolver ..> CSharpLibrarySetToStreamsWriter : injected

    AssemblyCompiler ..> CqlToResourcePackagingPipeline : injected
    ResourcePackager ..> CqlToResourcePackagingPipeline : injected 
    LibrarySetExpressionBuilder ..> CqlToResourcePackagingPipeline : injected

    TypeResolver ..> ResourcePackager : injected
    FhirResourcePostProcessor ..> ResourcePackager : injected\n(optional) 
Loading

…result-from-expressionbuilder-not-via-the-typemanager
…sionbuilder-not-via-the-typemanager' of https://github.com/FirelyTeam/firely-cql-sdk into 260-refactor---pass-tuple-types-as-a-result-from-expressionbuilder-not-via-the-typemanager
…result-from-expressionbuilder-not-via-the-typemanager
…sionbuilder-not-via-the-typemanager' of https://github.com/FirelyTeam/firely-cql-sdk into 260-refactor---pass-tuple-types-as-a-result-from-expressionbuilder-not-via-the-typemanager
@baseTwo baseTwo marked this pull request as ready for review September 10, 2024 18:04
@baseTwo
Copy link
Collaborator Author

baseTwo commented Sep 10, 2024

@baseTwo baseTwo enabled auto-merge September 10, 2024 19:18
@baseTwo baseTwo merged commit 6ad4ef0 into develop-2.0 Sep 11, 2024
2 checks passed
@baseTwo baseTwo deleted the 260-refactor---pass-tuple-types-as-a-result-from-expressionbuilder-not-via-the-typemanager branch September 11, 2024 12:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Refactor - Pass tuple types as a result from ExpressionBuilder, not via the TypeManager
2 participants