Вы можете создать шаблон функции следующим образом:
template<int R, int C>
void myFunction(double (&myArray)[R][C])
{
myArray[x][y] = 5;
etc...
}
Затем у вас есть размеры размеров через R и C. Для каждого размера массива будет создана другая функция, поэтому, если ваша функция большая и вы называете это множеством различных размеров массивов, это может быть дорогостоящим. Вы можете использовать его как оболочку над такой функцией, хотя:
void myFunction(double * arr, int R, int C)
{
arr[x * C + y] = 5;
etc...
}
Он обрабатывает массив как одномерный и использует арифметику для вычисления смещений индексов. В этом случае вы должны определить шаблон следующим образом:
template<int C, int R>
void myFunction(double (&myArray)[R][C])
{
myFunction(*myArray, R, C);
}
У меня были похожие мысли (особенно когда я использовал строковые поля поддержки для BLOB-объектов JSON). Вы можете использовать анонимные типы для ограничения возвращаемых данных.
Как в этом примере ( https://docs.microsoft.com/en-us/ef/core/querying/client-eval )
var blogs = context.Blogs
.OrderByDescending(blog => blog.Rating)
.Select(blog => new
{
Id = blog.BlogId,
Url = StandardizeUrl(blog.Url)
})
.ToList();
EF Core 2.1 также представил типы запросов , которые могут помочь сделать отношения между объектами вашего представления и моделью БД более ясными.
Я решил разделить решение на Чистую архитектуру (Web, Infrastructure и Core Layer). https://docs.microsoft.com/en-us/dotnet/standard/modern-web-apps-azure-architecture/common-web-application-architectures
Найти его лучше всего подходит, и его будет очень легко расширить, когда приложение начнет расти.