问个模块封装的有关问题

问个模块封装的问题
必须使用到一个全局结构体,其他文件中会使用到
typedef struct __Test
{
    int num1;
    int num2;
    int num3;
    int num4;
    char str[10];
}Test_t;

Test_t gTest;


假如我们简单的给num1赋值,也要使用类似下面的函数吗?
Test_set_num1(Test_t *test, int value)
{
    test->num1 = value;
}

新人在网上看到别人说模块封装时候说到的,麻烦大家多多解释下
------解决思路----------------------
用一个接口去访问是要好一些,比如以后你要修改的话,直接修改这个接口就行了
如果你直接使用gTest = value之类的,以后修改就麻烦了
------解决思路----------------------
如果只是简单的直接赋值test->num1 = value;那么不需要,除非你要对它的赋值操作进行一些限制、干预等才需要这么用。
比如Test_t.num1的值只能在1-5之间,则限制对它的赋值:

bool Test_set_num1(Test_t *test, int value)
{
if (value < 1 
------解决思路----------------------
 value > 5)
return false;
test->num1 = value;
return true;
}

又比如Test_t.num1表示毫秒,但是设置的时候用的单位是秒,则对它的赋值进行一些干预:

bool Test_set_num1(Test_t *test, int value)
{
test->num1 = value * 1000;
}


当然也许是编程风格问题,整个项目中一些地方用到了这种赋值函数,则进行统一,对所有的结构体成员都提供赋值函数,这样更好看,规范。
------解决思路----------------------
搞一个头文件,既让模块用,也让使用这个模块的源文件用。
/*********public.h goes here***************/
typedef struct __Test
{
    int num1;
    int num2;
    int num3;
    int num4;
    char str[10];
} Test_t;
 
extern Test_t  gTest;