# System Architecture with Dotnet SDK

**URL:** <https://community.temporal.io/t/system-architecture-with-dotnet-sdk/12811>\
**Category:** Community Support\
**Tags:** design, dotnet-sdk, workflow-implementat\
**Created:** [July 13, 2024, 6:08pm UTC](https://community.temporal.io/t/system-architecture-with-dotnet-sdk/12811 "2024-07-13T18:08:13Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jakenuts](https://sea2.discourse-cdn.com/flex016/user_avatar/community.temporal.io/jakenuts/32/5571_2.png) [@Jakenuts](https://community.temporal.io/u/Jakenuts)\
**Post date:** [July 13, 2024, 6:08pm UTC](https://community.temporal.io/t/system-architecture-with-dotnet-sdk/12811/1 "2024-07-13T18:08:13Z")

</div>

All the examples I’ve found using the dotnet SDK reference the workflow (and activities) in both the workers and the client code that initiates new workflows.

I was under the impression that you could build a decoupled system where one system could start a workflow without caring where/how it would be executed eliminating other decoupling methods like SQS and direct api calls. Since I seem to need the full binary logic of the workflow to exist in every place that might call it that feels pretty coupled. Am I misunderstanding the options or is there a way to execute a workflow by name and some contract for parameters.

Thanks!

---

<div class="post-metadata">

**Author:** ![Chad\_Retz](https://sea2.discourse-cdn.com/flex016/user_avatar/community.temporal.io/chad_retz/32/1396_2.png) [@Chad\_Retz](https://community.temporal.io/u/Chad_Retz)\
**Post date:** [July 15, 2024, 12:12pm UTC](https://community.temporal.io/t/system-architecture-with-dotnet-sdk/12811/2 "2024-07-15T12:12:32Z")

</div>

> [@Jakenuts](#):
>
> I was under the impression that you could build a decoupled system where one system could start a workflow without caring where/how it would be executed eliminating other decoupling methods like SQS and direct api calls

You absolutely can, even across languages if you want, but even within the language, not having the implementation on the caller side is very normal. Not only can the callers of activities and workflows use an interface with the same attributes, but every overload for those also has an option to just pass the string name w/ arbitrary object arguments instead. In fact, the type-safe invocation via lambda expressions is just sugar for the string form.

---

<div class="post-metadata">

**Author:** ![Jakenuts](https://sea2.discourse-cdn.com/flex016/user_avatar/community.temporal.io/jakenuts/32/5571_2.png) [@Jakenuts](https://community.temporal.io/u/Jakenuts)\
**Post date:** [July 16, 2024, 6:12am UTC](https://community.temporal.io/t/system-architecture-with-dotnet-sdk/12811/4 "2024-07-16T06:12:18Z")

</div>

Aha, interface, that makes sense. Thanks so much!
