我在嵌入式目标中编写C语言.由于日益复杂和可测试性问题,模块化是必须的.
一目了然,该程序是一个控制循环.使用内部硬件读取物理输入,应用一些计算并应用计算输出.但是,控件非常复杂,并且具有许多内部状态和变化的变量.
该控件分为不同的模块,捆绑不同状态的功能.常见的任务/计算在不同的模块中提供,并在不同的模块中调用,以保持自己的干燥.对于整个项目中的枚举和类型一致性,使用了一个顶级的.H文件(就我而言,在我的框架中,诸如继承之类的OO策略不是一个选项).
在决定如何将变量传递给模块和从模块传递变量时,我的问题出现了.
我最初的做法是:
mymodule.H:
struct Inputs{
int input1;
...
int inputN;
}
struct Outputs{
int output1;
...
int outputN;
}
void mymodule(Inputs in,Outputs* out);
Run Code Online (Sandbox Code Playgroud)
并且在main函数(或调用此模块的模块)中创建了"Inputs"和"Outputs"类型的结构.
然后,将变量复制到Inputs结构中,调用该函数(引用Outputs结构),一旦完成,该结构的内容将用于进一步的计算.
但是,这会导致大量内存占用,因为每个模块都需要在调用模块中创建InputType和OutputType实例.在我看来,这不是一个优雅的解决方案.顺便说一下,我的项目中不允许动态分配.
您能否提供一些指导和/或替代想法以获得良好的解决方案?
谢谢.
添加
其中一个解决方案可能是将InputStruct也作为指针传递,但由于它们是模块的有效输入,我怎么能保证它们不会沿着代码修改?
添加
顺便说一句,出现的另一个问题是,并非所有模块都接收相同的变量,并且没有可用的继承机制(因为这是C),每个模块的结构都必须加载适当的值.我很混淆......
我Activity A主持两个主要Fragment F1 and F2.无论F1和F2嵌套Fragment,每个都有自己的Listener接口进行数据交换.
根据我从这个问题的答案中理解,活动A:
需要知道由F1和托管的片段声明的每个单独的接口F2
需要路线在由片段生成的事件F1和F2以正确的主要片段,F1或F2.
如果我理解正确的,存在这种方法不模块化:活动需要了解两个它承载(片段一切F1和F2),并嵌套在碎片F1和F2.
我对么?当然,我很困惑......
我正在开始一个新的Angular项目并试图模块化我的所有代码 - 我厌倦了拥有大量的app.js文件,因为我正在为一家公司开发一个平台,所以我的代码很简单,模块化很容易测试,清洁和易于过渡到Angular 2.
目前,我有三个角度文件设置一切:
Angular.module.js
angular
.module('app', [
/* Shared Modules */
'app.config',
'app.states'
/* Feature Areas */
])
Run Code Online (Sandbox Code Playgroud)
Angular.config.js
angular
.module('app', [
/* Angular Modules */
'ngResource',
'ngSanitize',
/* 3rd-party Modules */
'ui.router'
]);
Run Code Online (Sandbox Code Playgroud)
Angular.states.js
angular
.module('app')
.config([
'$stateProvider',
'$urlRouterProvider',
'$locationProvider',
function($stateProvider, $urlRouterProvider, $locationProvider){
// Unknown URLs go to 404
$urlRouterProvider.otherwise('/404');
// No route goes to index
$urlRouterProvider.when('', '/');
// State provider for routing
$stateProvider
.state('home', {
url: '/',
views: {
'': {
templateUrl: 'home/_home.html'
}
}
}); …Run Code Online (Sandbox Code Playgroud) 是否可以将React App的Redux Store作为单独的npm 包开发,然后在React App 中开发Storeimport
例如:我有一个名为reactapp.
我开发了一个名为包reactapp-reduxstore包含Redux的商店,它的操作和减速
现在,我将其导入reactapp-reduxstore到我的reactapp项目中
// other imports
import { store } from 'reactapp-reduxstore'
const ReactApp = () => (
<Provider store={store}>
// React App Components
<Provider/>
)
// Mount ReactApp to DOM
Run Code Online (Sandbox Code Playgroud)
现在,如果我想使用我的redux 存储包中的操作,我会将操作导入到组件中。
import { addUser } from "reactapp-reduxstore/users"
// Use the action in my Component
Run Code Online (Sandbox Code Playgroud)
我只想知道, …
我有一个模块化Spring Boot项目。作为数据库模式管理器,我想使用Flyway. 如前所述,该项目是模块化的。这是因为会有使用不同模块的不同配置。这意味着,我想将与模块相关的所有内容打包到其特定项目中。有了Flyway这个似乎没那么简单。
我理想中的想象:
ApplicationA
|
|_Module1
| |
| |_db/migration
| |
| |_V1__InitModule1Tables
| |_V2__MigrateSomeTable
|
|_Module2
|
|_db/migration
|
|_V1__InitModule2Tables
|_V2__MigrateSomeTable
Run Code Online (Sandbox Code Playgroud)
每个模块都独立定义自己的飞行脚本,因为无论如何它们都不知道彼此的存在。每个模块显然都需要在共享数据库中拥有自己的飞行历史表。这样,整个系统解耦和配置下一个应用程序ApplicationB使用Module1,并Module3不会是一个麻烦。
好吧,我没有找到Flyway达到此解决方案的任何配置可能性。
在每个模块中做这样的事情显然是一个坏主意,因为 bean 的初始化/执行顺序是相当随机的,导致当我需要它们用于其他配置时没有创建表。也显得凌乱。
@Configuration
public class Module1Config {
@Autowired
public void flyway(DataSource dataSource) {
Flyway flyway = new Flyway();
flyway.setBaselineOnMigrate(true);
flyway.setTable(flyway.getTable() + "-module1");
flyway.setDataSource(dataSource);
flyway.migrate();
}
}
Run Code Online (Sandbox Code Playgroud)
我不认为我是第一个试图实现这一目标的人。我怎样才能达到所需的模块化Flyway配置?
以下解决方案以重复主题所建议的方式工作,对我有用:
我在我的base …
modularity database-migration flyway spring-boot spring-config
我正在寻找一种模块化Rails应用程序的方法.正如我所见,没有内置的方法来完成它.我发现了不同的插件/核心黑客,但我对他们的工作方式和成熟度感到不信任.
你有这方面的经验吗?
到目前为止,我发现了这些:
我读过的Java教程,比如使用嵌套类来演示概念,特性或用法.
这使我最初实现了一个我创建的示例项目:主活动类中有很多嵌套类.
它工作,但现在我有一个可怕的单片.java文件.我发现它有点不方便,我现在打算打破多个.java文件/类.
然而,在我看来,有时可能有理由不从他们的封闭课堂上上课.
如果是这样,考虑到模块化和易维护性,保持模块大的原因是什么?
是否存在将嵌套类转换为顶级类是不切实际(甚至不可能)的情况?换句话说,是否只有嵌套类可以满足某些功能?
我正在开发一个系统,我希望尽可能地将我的图层分离,你知道,某种模块化的应用程序可以在不对系统其他部分进行严格修改的情况下切换数据库和内容.
所以,我一直在关注x-Robert C. Martin关于良好实践,清洁代码,解耦架构等的谈话,以获得一些灵感.我觉得有点奇怪的是他对系统的描述Fitnesse以及他们为WikiPages 实现存储/加载方法的方式.我也在关联视频:Robert C. Martin - 清洁建筑与设计
他描述的内容(至少从我的理解中)是实体知道如何从某个持久层存储和加载自身的机制.当他想将WikiPages存储在内存中时,他只是覆盖了WikiPage并创建了一个新的InMemoryWikiPage.当他想将它们存储在数据库中时,他做了同样的事情......
所以,我的一个问题是 - 这种方法叫做什么?我一直在学习关于存储库模式和内容的所有时间,为什么应该像这样的持久性无知的类,但我似乎无法在他做的这件事上找到任何材料.因为我的应用程序将由模块组成,我认为这可能有助于解决我的问题而无需为我的实体创建一些集中存储......每个模块都会自行处理,包括其实体的持久性.
我认为代码看起来像是这样的:
public class Person : IEntity
{
public int ID { get;set; }
public string Name { get;set; }
public void Save()
{
..
}
public void Update()
{
}
public void Delete()
{
}
...
}
Run Code Online (Sandbox Code Playgroud)
看起来有点奇怪,但......或许我误解了他在视频中所说的话?
我的第二个问题是,如果你不同意这种方法,你会在这种模块化应用程序中采取什么样的路径?
如果可能,请提供一些示例并提供一些解释.
我看到像bootstrap这样的存储库开始在他们的package.json文件中包含其他标签,例如'style'和'less'.如何使用这些标签导入资产?
package.json
{
"name": "bootstrap",
"style": "dist/css/bootstrap.css",
"sass": "scss/bootstrap.scss",
"main": "./dist/js/npm"
}
Run Code Online (Sandbox Code Playgroud)
我正在使用ES6模块和webpack.我想能够使用package.json中的style标签导入我的样式表.
目前我正在做这样的事情:
my_stylesheets.less
@import "~bootstrap/dist/css/bootstrap";
Run Code Online (Sandbox Code Playgroud)
消费者在package.json中可用时添加路径很烦人.有没有办法可以使用package.json中的标签导入样式表?
如果我不能在package.json中使用标签,是否有一种在ES6模块中导入样式表的标准方法?
从这三个声明开始:
type SharedMsg
= SharedAction
type Page1Msg
= Page1Action
type Page2Msg
= Page2Action
Run Code Online (Sandbox Code Playgroud)
我有办法获得相同的以下一个?就像一种"合并"联盟类型的方式?
type Msg
= SharedAction
| Page1Action
| Page2Action
Run Code Online (Sandbox Code Playgroud)
=============================
上下文:我将Elm应用程序拆分为每页一个模块,并带有自己的文件夹.
某些操作将被共享,某些操作将特定于页面.
如果我要使用该Html.map方法,我觉得我必须重新编写页面在其自己的PageMsg消息类型中使用的每个共享操作:
type Page1Msg
= Page1Action
| SharedAction
type Msg
= Page1Msg Page1Msg
| Page2Msg Page2Msg
view : Model -> Html Msg
view =
Html.map Page1Msg (Page1View.view model)
Run Code Online (Sandbox Code Playgroud)
因此我考虑Msg为所有页面使用唯一类型,但通过在自己的文件夹中编写特定于页面的消息来保留模块性,然后以某种方式Msg通过合并它们来定义唯一类型.
modularity ×10
java ×2
javascript ×2
npm ×2
android ×1
angularjs ×1
architecture ×1
c ×1
c# ×1
decoupling ×1
ecmascript-6 ×1
elm ×1
embedded ×1
flyway ×1
interface ×1
less ×1
nested ×1
paradigms ×1
performance ×1
reactjs ×1
redux ×1
spring-boot ×1
union-types ×1
webpack ×1